home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / C / Applications / SML⁄NJ 93+ / Documentation / bugs / NEWS < prev    next >
Encoding:
Text File  |  1995-12-30  |  129.2 KB  |  3,628 lines  |  [TEXT/R*ch]

  1. -------------------------------------------------------------------------
  2. Standard ML of New Jersey, Version 0.93, February 1, 1992
  3.  
  4. This release is mostly bug fixes. Considerable effort has been put
  5. into making the HPPA more robust.
  6.  
  7. Bug fixes:
  8.  
  9. 489. exportFn image size too large
  10. 593. Compiler bug from bad overload declaration
  11. 671. visibility of parameter in functor signature
  12. 673. failure of type propagation with higher-order functors
  13. 674. System.Env.filterEnv raises exception IntmapF
  14. 676. Out of order record field evaluation.
  15. 677. memory leak
  16. 679. "Compiler bug: addObject" while compiling the Edinburgh library
  17. 680. Bad vertical alignment prettyprinting case expression.
  18. 681. building on SGI Indigos with cc version 3.10
  19. 682. excess newlines in compiler warning message
  20. 683. Compiler bug: Extern: update_structure 2
  21. 684. Compiler bug: checkList
  22. 685. loss of line numbers loading with System.Compile
  23. 686. floating-point divide by zero is broken on SGI
  24. 687. src/Makefile is out of date.
  25. 688. profiler doesn't compile
  26. 689. Compiling lambda prolog fails with compiler bug "adjust_variable".
  27. 690. maskSignals breaks interactive input
  28. 691. Compiler bug: ModuleUtil: lookFormalBinding 1
  29. 692. signal handling on 386 can dump core
  30. 694. System.Compile.execute provokes compiler bug ModuleComp.getImport
  31. 695. segmentation fault involving System.Ast
  32. 696. Type system error in "includes" of signatures
  33. 697. wrong Subscript exception in ByteArray
  34. 699. "Compiler bug: ModuleUtil: lookFormalBinding 1" (secondary)
  35. 700. wrong printing with toplevel vector pattern
  36. 701. wrong types printed for top-level exception declarations
  37. 703. betaexpand in cpsopt goes into infinite loop
  38. 704. System.Unsafe.SysIO.access raises exception instead of returning false
  39. 707. overloading in the profiler
  40. 708. array too large
  41.  
  42. -------------------------------------------------------------------------
  43. Standard ML of New Jersey, Version 0.92, November 18, 1992
  44.  
  45. This is a prerelease version that is being made available for testing
  46. in preparation for the next public release, which is expected to
  47. be 0.93.  The public release should follow in about a month, depending
  48. on the extent of problems discovered with this version.  This is still
  49. a development version, but we think it is fairly solid.  The known
  50. bugs are listed in the openbugs and masterbugs files available in
  51. the ftp "working" directory at research.att.com.
  52.  
  53. Ports:
  54.  
  55. *  IBM RS6000 workstations under AIX by Lal George.  Use makeml option
  56.    "-rs6000 aix".
  57.  
  58. *  AUX 3.0 on the Macintosh II family thanks to Thomas Eberhardt
  59.    (thomas@mathematik.uni-Bremen.de).  Use makeml option "-m68 aux".
  60.  
  61. *  Mark Leone has improved Guttesen's I386 port and has provided support
  62.    for BSD/386, and Mach operating systems.  Use makeml options
  63.    "-i386 bsd", "i386 -bsd386", or "i386 mach".
  64.  
  65. *  Andrew Tolmach has provided runtime support for the Sequent Symmetry
  66.    running under the Dynix 3 operating system.  Work is continuing on
  67.    support for the MP interface and for the Dynix/PTX operating system.
  68.    Use option "-sequent dynix3" with makeml.
  69.  
  70. We hope to have a working port for HP-PA systems by 0.93.
  71.  
  72.  
  73. New Features:
  74.  
  75. ======================================================================
  76. * No more infixes in signatures
  77. ======================================================================
  78.  
  79. Infix directives in signatures are no longer recognized. This allows
  80. the parser to be more independent from the elaboration. The only thing
  81. it needs is an environment containing the top-level fixity bindings.
  82. The spurious TAB binding used to represent fixity information has
  83. disappeared.  The parser issues no complaints except when it detects a
  84. syntax error.
  85.  
  86. If you took advantage of this unofficial feature, redefine the infix
  87. properties after each open of the structures concerned.
  88.  
  89.  
  90. ======================================================================
  91. * Syntax trees
  92. ======================================================================
  93.  
  94. "Unelaborated" syntax trees are provided in the structure System.Ast.
  95. These can be produced from source text using System.Compile.parse and
  96. can be compiled using System.Compile.compileAst.
  97.  
  98.  
  99. ======================================================================
  100. * Better Match and bind exception messages (Pierre Cregut)
  101. ======================================================================
  102.  
  103. If the file containing the definition of the binding or the match that has 
  104. caused the exception has been compiled with line numbers, then the reference
  105. System.errorMatch will contain a string giving the position of the failure
  106. at Runtime.  This information is automatically displayed at toplevel if the
  107. program aborts with an uncaught Match or Bind exception.
  108.  
  109.  
  110. ======================================================================
  111. * Vector expressions and patterns
  112. ======================================================================
  113.  
  114. The notation #[e1,...,en] denotes a vector value.  Similarly
  115. #[p1,...,pn] is a vector pattern with element patterns p1 through pn.
  116.  
  117.  
  118. ======================================================================
  119. * First-class environments
  120. ======================================================================
  121.  
  122. System.Env: ENVIRONMENT provides access to the environments used by
  123. the compiler.  See doc/compile.doc.
  124.  
  125.  
  126. ======================================================================
  127. * Compilation interface
  128. ======================================================================
  129.  
  130. System.Compile: COMPILE provides access to basic compilation functions.
  131. See doc/compile.doc.
  132.  
  133.  
  134. ======================================================================
  135. * Printing cyclic values
  136. ======================================================================
  137.  
  138. It is now possible to print values containing cycles because of the use
  139. of references or arrays.
  140.  
  141. The object beginning the loop is printed as
  142.  
  143.   <object> as %<number>
  144.  
  145. and occurrences inside its definition are printed as %<number>.
  146.  
  147. This feature can be turned off by setting the flag System.Print.printLoop
  148. (: bool ref) to false.
  149.  
  150.  
  151. ======================================================================
  152. * Printing arrays
  153. ======================================================================
  154.  
  155. The contents of arrays are now printed.  Delimiters are [| and |] (the
  156. contents of vectors were already printed).  The array delimiters don't
  157. work for input.
  158.  
  159.  
  160. ======================================================================
  161. * Print control
  162. ======================================================================
  163.  
  164. System.Print : PRINTCONTROL replaces System.Control.Print (which is
  165. temporarily retained and defined to be equal to System.Print).
  166. The definition of PRINTCONTROL is
  167.  
  168.   signature PRINTCONTROL =
  169.   sig
  170.     type outstream
  171.     val printDepth : int ref
  172.     val printLength : int ref
  173.     val stringDepth : int ref
  174.     val printLoop : bool ref
  175.     val signatures : int ref
  176.     val pathnames : int ref
  177.     val out : outstream ref
  178.     val linewidth : int ref
  179.     val say : string -> unit 
  180.     val flush: unit -> unit
  181.   end
  182.  
  183. Almost all printing by the SML system (except for some diagnostic printing
  184. that is normally disabled) uses System.Print.say.  The destination for
  185. printing can be changed by redefining System.Print.out.  For instance,
  186.  
  187.   System.Print.out := open_out "/dev/null";
  188.  
  189. will suppress printing.  System.Print.flush flushes output to the
  190. stream in System.Print.out.
  191.  
  192.  
  193. ======================================================================*
  194. * Pretty Printing  (Konrad Slind)
  195. ======================================================================
  196.  
  197. There is a new facility for installing user-defined prettyprinters
  198. over (monomorphic) user-defined types for use by the top-level loop of
  199. the SML compiler.  The user can also directly use the prettyprinting
  200. functions provided in System.PrettyPrint.  See doc/prettyprint.doc
  201. for details.
  202.  
  203.  
  204. ======================================================================
  205. * Higher-order modules (Pierre Cregut)
  206. ======================================================================
  207.  
  208. As an experimental extension of the module system, functors may now be
  209. defined in structures and functor signatures may be defined and
  210. referred to in structure signatures.  See doc/modules.doc.
  211.  
  212.  
  213. ======================================================================
  214. * Info  (Pierre Cregut)
  215. ======================================================================
  216.  
  217. A utility in tools/info is now available for displaying information on
  218. bindings.  The file tools/info/info.sml contains the definition of a
  219. structure Info that provides two basic functions:
  220.  
  221. - info: string list -> unit
  222. Takes the full path of an object and search informations on that
  223. object (same kind as what is displayed when the object was defined).
  224.  
  225. - search: string -> unit
  226. Takes a string and looks for all visible bindings containing
  227. that string as a substring.  It walks through the full environment
  228. tree (i.e. top-level environment, top-level structures, their
  229. substructures, etc.).
  230.  
  231. Example:
  232.  
  233. - Info.info ["+"];
  234. val + : 'a * 'a -> 'a as + : int * int -> int + : real * real -> real
  235.  
  236. infix 6 +
  237.  
  238. val it = () : unit
  239. - Info.info ["Array"];
  240. structure Array :
  241.   sig
  242.     eqtype 'a array
  243.     exception Size
  244.     exception Subscript
  245.     val array : int * '1a -> '1a array
  246.     val arrayoflist : '1a list -> '1a array
  247.     val length : 'a array -> int
  248.     val sub : 'a array * int -> 'a
  249.     val tabulate : int * (int -> '1a) -> '1a array
  250.     val update : 'a array * int * 'a -> unit
  251.   end
  252.  
  253. val it = () : unit
  254. - Info.search "compile";
  255. variable or constructor NewJersey.System.Compile.compile
  256. variable or constructor NewJersey.System.Compile.compileAst
  257. variable or constructor System.Compile.compile
  258. variable or constructor System.Compile.compileAst
  259. val it = () : unit
  260.  
  261.  
  262. ======================================================================
  263. * makeml man page
  264. ======================================================================
  265.  
  266. A revised man page for makeml is provided in the doc directory.
  267.  
  268.  
  269. ======================================================================
  270.  
  271.  
  272. Performance
  273. ===========
  274.  
  275. Space usage for compilation and user programs is significantly lower.
  276. Speed of generated code is somewhat slower, partly as a consequence of
  277. fixing some space safety problems.
  278.  
  279.  
  280. Looking Ahead
  281. =============
  282.  
  283. After 0.93 the next big change is that the batch compiler will
  284. disappear and the SourceGroup separate compilation system will be used
  285. to compile the compiler.  A single type secure linkage mechanism will
  286. be used by the interactive top-level, separate compilation, and
  287. bootstrapping.  The System.Compile interface will change substantially.
  288.  
  289. "Or" patterns will be supported (e.g. "fn ((nil,x) | (x,nil)) => x").
  290.  
  291.  
  292.  
  293. Bugs fixed since 0.91
  294. =====================
  295. (see masterbugs for descriptions)
  296.  
  297. 657. vector values not prettyprinted
  298. 661. prettyprinter -- Compiler bug: PPTable.install_pp
  299. 663. gc loop on illegal character
  300. 664. installing on Sony RISC NEWS (? not checked)
  301. 665. Compiler bug: getSymbols on opening nonexistent structures.
  302. 667. Compiler bug: getvars(STRdec)/fn opening a structure
  303. 668. missing info in syntax error messages
  304. 669. redundant rule added in some matches
  305. 670. missing indicators in redundant match warning messages
  306. 672. start() in i386 Mach
  307. -------------------------------------------------------------------------
  308. Standard ML of New Jersey, Version 0.91, October 26, 1992
  309. Added to this version are:
  310.  
  311. - The runtime has been ported to AUX 3.0
  312.  
  313. - New monomorphic weak pointer abstraction (see perv.sig and perv.sml)
  314.  
  315. ======================================================================
  316. Higher Order Functors
  317. ---------------------
  318. A new "curried" notation for functor is available:
  319.  
  320.   functor f <par1>....<parn> = <structure def>
  321.  
  322. where <pari> is as usual :
  323.   (<id>:<signature>)
  324. or
  325.   (<signature body>)
  326. A corresponding functor signature can be defined by:
  327.   funsig f <par1> ... <parn> = <signature def>
  328.  
  329. functor application is also available:
  330.  
  331.   f (<arg1>) ... (<argn>)
  332.  
  333. with <argi> as usual (structure def or structure body).
  334.  
  335. The abstract syntax has been a little cleaned up to accomodate those
  336. new changes.
  337.  
  338. strexp = ...
  339.        | AppStr of path * (strexp * bool) list (* application *)
  340.  
  341. The boolean just states if the structure or just its body was given
  342.  
  343. fctexp = ...
  344.        | FctFct of  {                     (* definition of a functor *)
  345.              params     : (symbol option * sigexp) list,
  346.              body       : strexp,
  347.              constraint : sigexp option}
  348.  
  349. fsigexp = ...
  350.         | FsigFsig of {param: (symbol option * sigexp) list, def:sigexp}
  351.                                                   (* defined funsig *)
  352.  
  353. The symbol option contains the name of the parameter if it was named.
  354.  
  355. ======================================================================
  356. Parser
  357. ------
  358. Infix notations in signatures are no more recognised. This allows the
  359. parser to be more independant from the elaboration. The only thing it
  360. needs is an environment containing the top-level fixity bindings.  The
  361. spurious TAB binding used to represent fixity information has
  362. disappeared.  The parser issues no more complaints except if it
  363. detects a syntax error.
  364.  
  365. If you took advantage of this unofficial feature, redefine the infix properties
  366. after each open of the structures concerned.
  367.  
  368. ======================================================================
  369. Printing
  370. --------
  371. It is now possible to print objects containing loops because of the use
  372. of references or arrays.
  373.  
  374. The object begining the loop is printed as
  375. <object> as %<number>
  376. and its occurence inside its definition are printed as %<number>.
  377.  
  378. This feature can be turned off by togling the flag 
  379. System.Control.Print.printLoop (bool ref) to false.
  380.  
  381. The contents of arrays are now printed.  Delimiters are [| and |] (the
  382. contents of vectors were already printed).
  383.  
  384. ======================================================================
  385. Match and bind exception
  386. ------------------------
  387. If the file containing the definition of the binding or the match that has 
  388. caused the exception has been compiled with line numbers, then the reference
  389. System.errorMatch will contain a string giving the position of the failure
  390. at Runtime. This information is automatically displayed at toplevel if the
  391. program aborts with an uncaught Match or Bind exception.
  392.  
  393. ======================================================================
  394. Info
  395. ----
  396. A utility in tools/info is now available for displaying information on
  397. bindings.  The file tools/info/info.sml contains the definition of a
  398. structure Info that provides two basic functions:
  399.  
  400. - info: takes the full path of an object and search informations on that
  401. object (same kind as what is displayed when the object was defined).
  402.  
  403. - search: takes a string and looks for all visible bindings containing that
  404. string as a subpart. It walks through the full tree.
  405.  
  406. Example:
  407.  
  408. - Info.info ["+"];
  409. val + : 'a * 'a -> 'a as + : int * int -> int + : real * real -> real
  410.  
  411. infix 6 +
  412.  
  413. val it = () : unit
  414. - Info.info ["Array"];
  415. structure Array :
  416.   sig
  417.     eqtype 'a array
  418.     exception Size
  419.     exception Subscript
  420.     val array : int * '1a -> '1a array
  421.     val arrayoflist : '1a list -> '1a array
  422.     val length : 'a array -> int
  423.     val sub : 'a array * int -> 'a
  424.     val tabulate : int * (int -> '1a) -> '1a array
  425.     val update : 'a array * int * 'a -> unit
  426.   end
  427.  
  428. val it = () : unit
  429. - Info.search "compile";
  430. variable or constructor NewJersey.System.Compile.compile
  431. variable or constructor NewJersey.System.Compile.compileAst
  432. variable or constructor System.Compile.compile
  433. variable or constructor System.Compile.compileAst
  434. val it = () : unit
  435.  
  436.                         -- cregut
  437. ======================================================================
  438.  
  439. Pretty Printing
  440.  
  441. There is a new facility for installing user-defined prettyprinters
  442. over (monomorphic) user-defined types for use by the top-level loop of
  443. the SML compiler. The underlying algorithm is that of Oppen (1980).
  444. There are more expressive prettyprinting languages around, notably
  445. that of PPML, but the Oppen interface has the benefit of being
  446. efficiently implementable---it runs in constant space. Thus it is a
  447. good option for modest prettyprinting tasks that need to be quick,
  448. such as the printing of SML values.
  449.  
  450. The high-level view is that the user will define a prettyprinter for a
  451. datatype and install it in a prettyprinter table.  When it comes time for
  452. the compiler to print a value, it looks first in the prettyprinter
  453. table, to see if a prettyprinter is installed for that type.  If so, it
  454. calls the prettyprinter on the value, otherwise, it calls the default
  455. printing routine.
  456.  
  457. The Oppen algorithm provides a {\em block} abstraction:  a block
  458. establishes a level of indentation. Since blocks can be nested and
  459. offset from one another, levels of indentation can be achieved.  A block
  460. can be broken up by one or more {\em breaks}, which mark possible places
  461. to add carriage returns. There are two styles of block: CONSISTENT
  462. and INCONSISTENT.  If a consistent block does not fit completely
  463. onto the current line, a carriage return will be added after each
  464. component of the block.  If an INCONSISTENT block does not fit completely
  465. onto the current line, a carriage return is added after the last
  466. item that does fit on the line; this style of block conserves on
  467. vertical space.
  468.  
  469.  
  470. The Signature
  471. -------------
  472.  
  473. The pervasive structure System.PrettyPrint has the following signature:
  474.  
  475. signature PRETTYPRINT =
  476. sig
  477.   datatype break_style = CONSISTENT | INCONSISTENT
  478.   val begin_block : break_style -> int -> unit
  479.   val end_block : unit -> unit
  480.   val add_break : (int*int) -> unit
  481.   val add_string : string -> unit
  482.   val add_newline : unit -> unit
  483.   val reset_pp : unit -> unit
  484.   val flush_output : unit -> unit
  485.   val set_line_width : int -> unit
  486.   val set_pp_output_function : (string -> unit) -> (string -> unit)
  487.   val install_pp : string list -> ('1a -> unit) -> unit
  488.   val pp : (string -> unit) -> ('a -> unit) -> 'a -> unit
  489.   val pp_to_string : ('a -> unit) -> 'a -> string
  490. end
  491.  
  492. datatype break_style = CONSISTENT | INCONSISTENT
  493.  
  494.   This defines the type of breaks.
  495.  
  496. val install_pp (path: string list) (ppfn: 'a -> unit) : unit  (* unsafe! *)
  497.  
  498.   The first argument is a path designating a nullary type constructor in
  499.   the current interactive top-level environment.  This must be
  500.   generative, i.e. it must be a datatype or abstype constructor.  The
  501.   second argument is a prettyprinting function for that type.  Note that
  502.   this connection between the type constructor designated by the path
  503.   and the printing function cannot be enforced by type checking, so this
  504.   operation is unsafe.
  505.  
  506.   The function ppfn is installed in the interactive system's
  507.   prettyprinter table and it will be used when printing values of
  508.   the designated type.
  509.  
  510.   The facility will be extended to allow nonnullary type constructors
  511.   in the future.
  512.  
  513. val pp (consumer: string -> unit) (ppfn: 'a -> unit) (v: 'a) : unit
  514.  
  515.   This takes a value v and a prettyprinter function ppfn for the type of
  516.   v and applies the prettyprinter to the value, with the result directed
  517.   to the consumer function.  This is useful when one wants to prettyprint
  518.   values as a computation progresses, rather than just at the end.
  519.  
  520. val begin_block : break_style -> int -> unit
  521.  
  522.   This begins a new level of indentation, at the current offset from the
  523.   left margin. The first argument determines how the block is to be
  524.   broken. The second argument determines the new offset if the block
  525.   gets broken.
  526.  
  527. val end_block ()
  528.  
  529.   Prettyprinting reverts to the previous level of indentation.
  530.  
  531. val add_break (size:int, offset:int): unit
  532.  
  533.   Notify the prettyprinting engine that a carriage return is possible.
  534.   The argument to this function is a pair; the first member is the
  535.   size of the break, the second member is an offset. This
  536.   ``break'' offset is used for finer control over indentation than that
  537.   offered by the block offset. The current block style and the size of
  538.   the block determine what action is to be taken:
  539.  
  540.     * block_style = CONSISTENT and the entire block fits on the
  541.     remainder of the current line: output size spaces.
  542.  
  543.     * block_style = CONSISTENT and the block does not fit on the rest
  544.     of the line:  add a carriage return after each component in the block
  545.     and add the block offset to the current indentation level.  Each
  546.     component will be further indented by offset spaces.
  547.  
  548.     * block_style = INCONSISTENT and the next component of the
  549.     current block fits on the rest of the line: Output size spaces.
  550.  
  551.     * block_style = INCONSISTENT and the next component doesn't
  552.     fit on the rest of the line:  output a carriage return and indent to
  553.     the current indentation level plus the block offset plus offset
  554.     extra spaces.
  555.  
  556.   size is taken into account when determining if there is enough room
  557.   to print the next component in the block.
  558.  
  559. val add_string (s: string) : unit
  560.  
  561.   Outputs the given string.
  562.  
  563. val add_newline () : unit
  564.  
  565.   Forces the output of a carriage return. 
  566.  
  567. val set_line_width (line_width: int) : unit
  568.  
  569.   Allows the user to change the prettyprinting engine's notion of how
  570.   wide the line is. This call re-allocates the token buffer used by the
  571.   prettyprinting engine, and so should only be called when
  572.   prettyprinting is not happening. The initial line width is 70
  573.   characters.
  574.  
  575. val set_pp_output_function :(string -> unit) -> (string -> unit)
  576.  
  577.   Prettyprinting eventually boils down to the output of strings; 
  578.   blocks and breaks are just instructions for artfully arranging the
  579.   strings. This function allows one to change the output function that
  580.   gets applied to strings. The returned value is the current output
  581.   function. The initial output function is
  582.  
  583.       fn s => output(std_out,s).
  584.  
  585.  
  586. Example
  587. -------
  588.  
  589. open System.PrettyPrint;
  590.          
  591. datatype Num = Zero | Suc of Num;
  592.  
  593. fun pp_Num Zero = add_string "Z"
  594.   | pp_Num (Suc n) = ( pp_Num n; add_string "'" );
  595.  
  596. val _ = install_pp ["Num"] pp_Num;
  597.  
  598. datatype Nexp
  599.   = Atom of Num
  600.   | Add of (Nexp*Nexp);
  601.  
  602. fun pp_Nexp ne =
  603.     let fun pr (Atom a) = pp_Num a
  604.           | pr (Add(a1,a2)) =
  605.           (pr a1;
  606.                add_string " +";
  607.                add_break(1,0);
  608.                pr a2)
  609.      in begin_block CONSISTENT 0;
  610.         pr ne;
  611.         end_block()
  612.     end;
  613.  
  614. val _ = install_pp ["Nexp"] pp_Nexp;
  615.  
  616. - val A = Add (Atom(Suc(Suc(Suc(Suc(Suc(Suc(Zero))))))),
  617.                Atom(Suc(Suc(Suc(Suc(Suc(Suc(Zero))))))));
  618.  
  619. val A = Z'''''' + Z'''''' : Nexp
  620. - set_line_width 20;
  621. val it = () : unit
  622. - A;
  623. val it =
  624.   Z'''''' + Z''''''
  625.   : Nexp
  626. - set_line_width 10;
  627.  
  628. - A;
  629. val it =
  630.   Z'''''' +
  631.   Z''''''
  632.   : Nexp
  633. - Add(A,A);
  634. val it =
  635.   Z'''''' +
  636.   Z'''''' +
  637.   Z'''''' +
  638.   Z''''''
  639.   : Nexp
  640.  
  641. ======================================================================
  642.  
  643. Bug Fixes:
  644. 449. poor error message for mismatching datatype spec
  645. 469. infix precedence bound
  646. 473. inadequate error message
  647. 480. Exit status of makeml is 1.
  648. 489. exportFn image size too large
  649. 495. inaccurate emacs info file
  650. 501. out of date yacc example code
  651. 505. bad datatype definition accepted
  652. 507. most negative integer causes compiler bug (see also 630, 632)
  653. 511. dying on interupt with SIGEMT (same as 484, 518)
  654. 513. not waiting for execute children
  655. 517. type errors in examples/cat.sml
  656. 532. squaring big real number dumps core on sparc (see also 638)
  657. 536. twig out of date
  658. 541. warnings while compiling runtime
  659. 544. poor error message
  660. 549. Match exception while compiling
  661. 552. Error message line numbers from std_in (see also 575)
  662. 553. incorrect syntax accepted (not a bug)
  663. 554. unused token constructor QUERY
  664. 566. An addition to sun2hp.el
  665. 582. interaction of open declarations and eval_stream
  666. 602. uncaught exception UnboundTable using System.Env.describe
  667. 608. minor error in runtime
  668. 609. include syntax
  669. 610. changeLvars broken
  670. 613. Compiler bug message on occurence of typevar in signature
  671. 616. overloading versus user-bound type variable
  672. 617. interpreter fails with "no default in interp"
  673. 622. Bus error on DECstation 5000/200
  674. 623. wildcard is equivalent to a serie of wildcards (see also 629)
  675. 624. System.Env.filterEnv causes Compiler bug: copystat.
  676. 625. Runbind exception still being raised.
  677. 633. space leak
  678. 635. byteArray.update and ByteArray.sub raise Ord
  679. 636. Vector patterns don't work at top level
  680. 638. subnormal numbers
  681. 640. flakiness of System.Env (particularly filterEnv)
  682. 642. Sourcegroup 2.1 dependency analysis fails (see also bug 649)
  683. 643. building smld produces Compiler bug: DebugError: ...
  684. 645. Compiler bug from bugs 183,228,343 code: CoreInfo.coreLty3
  685. 646. module test tile mod14.sml fails with Compiler bug: ModuleUtil: getFctStamp
  686. 647. PWR_2_CALLEESAVE not defined in some cases
  687. 649. too strong optimization of datatype constructor (same as 642)
  688. 650. Real.realfloor has wrong type
  689. 651. System.Directory.cd fails on numbers as directory names
  690. 652. Compiler bug: contmap enterv 123 building HOL
  691. 653. VECTOR signature isn't pervasive (unlike ARRAY)
  692. 654. System.Directory.cd fails on valid pathnames (same as 651)
  693. 655. Compiling Isabelle-92 generates a bus error
  694. 656. Excessive dead code
  695. 657. vector values not prettyprinted
  696. 658. Compiler bug: PrintVal.switch: none of the datacons matched
  697.  
  698. xxx uncaught exception SpillFreemap in closure profiling
  699. -------------------------------------------------------------------------
  700. Standard ML of New Jersey, Version 0.90 September 22, 1992
  701.  
  702.  
  703. 60 files changed and 16 new files were added to this version.
  704.  
  705. ---Bug Fixes---
  706. Appel:
  707.  
  708. 469    infix precedence bound 
  709. 507     most negative integer causes compiler bug (see also 630, 632)
  710. 532      squaring big real number dumps core on sparc (see also 638)
  711. 541     warnings while compiling runtime
  712. 554     unused token constructor QUERY
  713. 566      An addition to sun2hp.el (?)
  714. 609     include syntax
  715. 617     interpreter fails with "no default in interp"
  716. 638    subnormal numbers
  717.  
  718. Jhr:
  719.  
  720. 633    space leak bug 
  721. 636      top-level vector pattern bug 
  722. 635    inline bytearray ops bug
  723.  
  724. Cregut:
  725. 623     wildcard is equivalent to a series of wildcards (see also 629)
  726. 646    test file mod14.sml fails with Compiler bug: ModuleUtil: getFctStamp
  727. 642    Sourcegroup 2.1 dependency analysis fails
  728.  
  729. ---Changes---
  730. Jhr:
  731.  
  732.     Made Real.abs an inline operation
  733.  
  734. Zhong:
  735.  
  736.           The new cps/convert.sml now generates multi-argument cps escaping 
  737.           functions and propagates the appropriate type information into the 
  738.           back end if the System.Control.CG.representation tag is turned on.  
  739.           The new cpsopt and closure modules dealing with multi-argument 
  740.           escaping user and continuation functions are expected soon.
  741.  
  742. Leone:
  743.     Rewrote Guttesen's Windows i386 code generator resulting
  744.     in a 20% reduction in code size and 25% improvement in running
  745.     speeds (at least on the SX chip). Ported the runtime to Mach
  746.     and BSD/386.
  747.  
  748. Lal:
  749.     Removed the branch delayed architecture assumption from the
  750.     scheduler. Scheduling is now driven by latencies associated
  751.     with each instruction. (This change will affect anyone writing
  752.     a code generator.)
  753.  
  754.     Implemented the RS6000 code generator. Some preliminary numbers:
  755.  
  756.     All times in seconds.
  757.     --------------------------------------------------------------------
  758.            IBM RS6000 (v0.88) | SPARC (v0.86)     | RATIO sparc/rs6k
  759.     ==============================|===================|==================
  760.     Program:   compile  execute   | compile  execute  | compile  execute
  761.     ------------------------------|-------------------|------------------
  762.     boyer          19.97     2.51    |  31.32    3.80    |   1.57     1.51
  763.     life         5.51    22.39    |   7.90   22.13    |   1.43     0.99
  764.     k-bendix    14.59    16.39    |  24.69   25.67    |   1.69     1.57
  765.     simple      37.95    54.62    |  89.35   72.28    |   2.35     1.32
  766.     mandelbrot   0.90    23.88    |   0.90   30.24    |   1.00     1.26
  767.     lexgen      28.68    17.8     |  50.64   19.27    |   1.77     1.08
  768.     vliw       107.34    31.44    | 171.39   40.96    |   1.60     1.30
  769.     yacc       134.10     5.63    | 252.56    8.05    |   1.88     1.42
  770.     cml-sieve   24.09    25.75    |  38.92   39.60    |   1.61     1.54
  771.  
  772. ---Changed Files---
  773. all
  774. makeml 
  775. basics/access.sml
  776. basics/primop.sig
  777. boot/makemos.sml
  778. boot/math.sml
  779. boot/perv.sml
  780. build/index.sml
  781. build/linkage.sml
  782. codegen/interp.sml
  783. coder/coder.sml
  784. coder/machinstr.sig
  785. cps/cmachine.sig
  786. cps/convert.sml
  787. cps/cps.sml
  788. cps/cpscomp.sml
  789. cps/cpsopt.sml
  790. cps/expand.sml
  791. cps/generic.sml
  792. cps/limit.sml
  793. elaborate/elabcore.sml
  794. env/environ.sml
  795. env/prim.sml
  796. m68/m68.sml
  797. m68/m68ascode.sml
  798. m68/m68coder.sig
  799. m68/m68mcode.sml
  800. mips/mips.sml
  801. mips/mipsas.sml
  802. mips/mipsdepend.sml
  803. mips/mipsinstr.sml
  804. mips/mipsmc.sml
  805. modules/applyfct.sml
  806. parse/astutil.sig
  807. parse/astutil.sml
  808. parse/ml.grm
  809. parse/ml.grm.sig
  810. parse/ml.grm.sml
  811. print/printdec.sml
  812. runtime/MIPS.prim.s
  813. runtime/Makefile
  814. runtime/allmo.c
  815. runtime/cfuns.c
  816. runtime/cstruct.c
  817. runtime/exncode.c
  818. runtime/export.c
  819. runtime/fpregs.h
  820. runtime/linkdata.c
  821. runtime/ml_os.h
  822. runtime/ml_state.h
  823. runtime/run_ml.c
  824. runtime/signal.c
  825. runtime/sun2hp.el
  826. sparc/sparc.sml
  827. sparc/sparcas.sml
  828. sparc/sparcinstr.sml
  829. sparc/sparcmc.sml
  830. translate/inlineops.sml
  831. translate/tempexn.sml
  832. vax/vax.sml
  833.  
  834.  
  835. ---New Files---
  836. rs6000/rs6000.sml
  837. rs6000/rs6000as.sml
  838. rs6000/rs6000depend.sml
  839. rs6000/rs6000glue.sml
  840. rs6000/rs6000instrset.sml
  841. rs6000/rs6000mc.sml
  842.  
  843. i386/i386.sml
  844. i386/i386ascode.sml            
  845. i386/i386coder.sig              
  846. i386/i386glue.sml               
  847. i386/i386jumps.sig   
  848. i386/i386jumps.sml              
  849. i386/i386mcode.sml
  850.  
  851. runtime/RS6000.prim.s
  852. runtime/I386.prim.s
  853. runtime/export-rs6000-aix
  854.  
  855. -------------------------------------------------------------------------
  856. Standard ML of New Jersey, Version 0.89, September 4, 1992
  857.  
  858. 63 files were changed and 2 new ones added in this version 89.
  859. 1 file (translate/mcopt.sml) is deleted from 88. 
  860.  
  861. Main Changes:
  862.  
  863. 1) The intermediate lambda language (basics/lambda.sml) is modified to 
  864.    carry type information from the front end to the back end for the 
  865.    purpose of implementing representation analysis. This includes 
  866.    corresponding changes of abstract syntax, type checker, match compiler, 
  867.    linking interfaces between different modules, thinning interfaces, the 
  868.    translate module, and the convert module. The new flag System.Control.
  869.    CG.representations which activates representation analysis is currently 
  870.    turned off in this version. All type information are temporarily thrown 
  871.    away after the convert phase. 
  872.    
  873. 2) A much cleaner and faster closure module closure.sml. The calleesaves 
  874.    and non-calleesavees are merged more elegantly; calleesaves 1 works
  875.    now; in compiling the compiler, the new closure modules is about 44%
  876.    faster than the old one in version 88.
  877.  
  878. 3) Fixes the following bug:
  879.    
  880.      461. overloading and weak polymorphism
  881.      539. weak typing bug
  882.      607. weak typing
  883.      612. bad lambda depth calculated in type checker
  884.      614. high-order-functor thinning-in
  885.      618. LOOKUP FAILS, Compiler bug: 110 in CPSgen
  886.      619. Compiler bug: Escapemap on xxxx
  887.      620. higher-order functor causes Compiler bug
  888.      621. polymorphic equality not eliminated as often as it should be
  889.      624. System.Env.filterEnv causes Compiler bug: copystat.
  890.      626. extra spaces in SPARC.prim.s
  891.  
  892. --------------------------------------------------------------------------
  893. cps/closure.sml:
  894. cps/contmap.sml
  895.     A much cleaner version (than 87) by Trevor: the calleesaves and
  896.     non-calleesavees are merged more elegantly; calleesaves 1 works
  897.     now; the closure phase is about 30% faster than 86. 
  898.     Zhong merges the ebtest function in closure.sml into contmap.sml.
  899.     This results in another 18% speedup for the closure phase. 
  900.     Zhong fixed the single element closure problem and also the 
  901.     fillin bug. 
  902.  
  903. --------------------------------------------------------------------------
  904. Mark's Changes:
  905.  
  906. modules/applyfct.sml
  907. modules/abstractfct.sml
  908. elaborate/elabstr.sml
  909. basics/typesutil.sig
  910. basics/typesutil.sml
  911. runtime/SPARC.prim.s
  912. typing/typecheck.sml
  913.  
  914.      Fixes the following bug:
  915.         461. overloading and weak polymorphism
  916.         539. weak typing bug
  917.         607. weak typing
  918.         612. bad lambda depth calculated in type checker
  919.         622. extra spaces in SPARC.prim.s
  920.  
  921. --------------------------------------------------------------------------
  922. Pierre's Changes:
  923.  
  924. elaborate/elabstr.sml:
  925.        same as Mark's changes. Fixes an old bug of type-checking. 
  926.        The local declarations in a top-level local were considered 
  927.        as top level.
  928.  
  929. modules/applyfct.sml:
  930.  
  931.      The thinning computed in the thinning of the argument = pair
  932.      parameter-parent. But what we want is the thinning of the
  933.      parameter only. This code extracts it.
  934.  
  935. modules/instantiate.sml:
  936.  
  937.      Except the pleasure of fixing a partial match, these changes provide 
  938.      a fix to a bug in functor signature instantiation. To instantiate the 
  939.      body, you need to give to elabstr a predicate identifying stamps 
  940.      belonging to the argument in the template body. The function provided 
  941.      so far was wrong because it didn't distinguished global stamps from 
  942.      local ones: e.g.,
  943.                  funsig f() = struct val x:int end
  944.      couldn't be instantiated correctly because it believed that int was 
  945.      declared in the argument of f. Having the right function is a little 
  946.      complex because the argument is the parameter + .... the parent, which 
  947.      is the body of the embedding functor and its argument and so on.
  948.  
  949. env/environ.sml:
  950.  
  951.      Getbindings was completely wrong. In fact the old version relied on
  952.      the assumption that there was a binding per symbol, so when you  
  953.      used it you could merge the list of symbols and the list of bindings
  954.      This is no more true, (we can have 0 (nothing found but no error 
  955.      raised in the filtering) 1 old case or 2 (an object and its fixity 
  956.      info)) So we keep the symbols with it. In fact fixity info are kept 
  957.      in a separate list.
  958.  
  959. boot/system.sig
  960. boot/perv.sml
  961. parse/ast.sml
  962. ./all
  963.  
  964.      fixes the "exporting the AST" bug. see comments in ast.sml.
  965.  
  966. --------------------------------------------------------------------------
  967. Zhong's Changes:
  968.  
  969. ./all 
  970.      Add transtypes.sml and transbinding.sml. And change the compilation
  971.      order of several files because of the new dependencies.
  972.  
  973. absyn/absyn.sml
  974.      Change the definition of the abstract syntax, more specifically 
  975.       (1) VARexp of var ref * ty option  
  976.             if "var" has polymorphic type, "ty option" specifies its
  977.             corresponding type instance at this place; if "var" has 
  978.             monomorphic type, "ty option" is NONE.
  979.  
  980.       (2) CONexp of datacon * ty option
  981.           CONpat of datacon * ty option 
  982.           APPpat of datacon * ty option * pat
  983.             if "datacon" has polymorphic type, "ty option" specifies 
  984.             its corresponding type instance at this place; if "datacon" 
  985.             has monomorphic type, "ty option" is NONE.
  986.  
  987.       (3) FNexp of rule list * ty  
  988.             "ty" specifies the argument type of this function.
  989.  
  990.       (4) RAISEexp of exp * ty 
  991.             "ty" specifies the result type of this RAISEexp.
  992.   
  993.       (5) VECTORpat of pat list * ty  
  994.             "ty" specifies the type of the contents in the vector. 
  995.  
  996.       
  997.        Files affected by this:
  998.          absyn/printabsyn.sml 
  999.          build/index.sml 
  1000.          build/linkage.sml
  1001.          build/prof.sml
  1002.          debug/debugger.sml
  1003.          debug/dprintabsyn.sml
  1004.          debug/instrum.sml
  1005.          debug/queries.sml
  1006.          debug/static.sml
  1007.          debug/util.sml
  1008.          elaborate/elabcore.sml
  1009.          elaborate/elabutil.sml
  1010.          elaborate/misc.sml
  1011.          print/printdec.sml 
  1012.          translate/mc.sml
  1013.          translate/mccommon.sml
  1014.          translate/nonrec.sml
  1015.          translate/tempexpn.sml
  1016.          translate/translate.sml
  1017.          typing/typecheck.sml
  1018.  
  1019. basic/lambda.sml
  1020.      The new intermediate lambda language. More specifically,
  1021.       (1) Add a notion of lambda type --- the new datatype lty. 
  1022.           The translation from ML types to Lambda.lty is defined 
  1023.           in translate/transtypes.sml and translate/transbinding.sml.
  1024.           (for more doc, see basics/lambda.sml itself)
  1025.  
  1026.       (2) Remove the record tag from the lambda language, add a new
  1027.           constructor called VECTOR. This still distinguishes VECTOR 
  1028.           and RECORD in translate phase. The lambda types for VECTOR 
  1029.           and RECORD are different, one is BOXEDty while another is 
  1030.           RECORDty.
  1031.  
  1032.       (3) Add new constructors WRAP and UNWRAP.
  1033.  
  1034.       (4) Add lty information into the dataconstr type 
  1035.  
  1036.       (5) In FN(v,t,_), t is the type of v; in FIX(fl,tyl,_,_), tyl
  1037.           is a list of types for fl; in RAISE(e,t), t is the result
  1038.           type of the expression RAISE(e,t); in PRIM(p,t), t is the
  1039.           type of the primitive p. 
  1040.  
  1041.       (6) BOGUSty is a place holder.
  1042.  
  1043.       Files affected by this: 
  1044.         build/compile.sml
  1045.         build/computil.sml 
  1046.         build/evalloop.sml   
  1047.         build/process.sml
  1048.         codegen/interp.sml
  1049.         codegen/lambdaopt.sml
  1050.         codegen/opt.sml
  1051.         codegen/reopen.sml
  1052.         cps/convert.sml
  1053.         translate/equal.sml
  1054.         translate/inlineops.sig
  1055.         translate/inlineops.sml
  1056.         translate/mc.sml 
  1057.         translate/mccommon.sml
  1058.         translate/mcprint.sml
  1059.         translate/reorder.sml
  1060.         translate/translate.sml
  1061.         translate/unboxed.sml
  1062.  
  1063. basics/typesutil.sig
  1064. basics/typesutil.sml
  1065.      Add a function getRecTyvarMap : int * Types.ty -> (int -> bool); 
  1066.      This function check whether a bound tyvar has occurred in some 
  1067.      datatypes whose type constructor has an non-zero arity, e.g., 
  1068.      'a list. This is useful for representation analysis. 
  1069.  
  1070. boot/perv.sig
  1071. boot/perv.sml
  1072. build/batch.sml
  1073.      Add a new flag System.Control.CG.representations used to turn on
  1074.      or off all representation analysis code. 
  1075.  
  1076. build/batch.sml
  1077. build/boot.sml
  1078. build/compile.sml
  1079. build/computil.sml
  1080. build/evalloop.sml
  1081. build/process.sml
  1082.      Add the inverseEnv to be part of the arguments in the function 
  1083.      "process". InverseEnv is useful for finding out the type of an 
  1084.      arbitrary lvar. Add a new function called gengetty in the 
  1085.      computil.sml, this function returns a lambda type for each lvar.
  1086.  
  1087. cps/convert.sml
  1088.      Fix the bug 618 and 619. No CPS.SELp is allowed before cpsopt phase.
  1089.      Partially add in the new converter which can take advantage of the 
  1090.      type information when the System.Control.CG.representations flag 
  1091.      is turned on. A new and cleaner convert module is expected in the 
  1092.      next release.
  1093.  
  1094. codegen/opt.sml
  1095.      Change the linking interface, add appropriate type information
  1096.      in the closestr and closetop functions.
  1097.  
  1098. env/coreinfo.sig
  1099. env/coreinfo.sml
  1100.      Add a new coreLty reference cell which will tell you the type of
  1101.      the module Core. This is useful to find the type of any components
  1102.      in Core.
  1103.  
  1104. env/invenv.sml
  1105.      Add a Lambda.lty to the componantId type in the inverse 
  1106.      environment. 
  1107.  
  1108. env/environ.sml    
  1109.      Change the function makeStaticEnv, VARbind is now also included
  1110.      in the inverse environment. This is useful when given a lvar at
  1111.      the linking interface, we need find out its static types. 
  1112.      The function filterEnv now also takes the inverse environment. 
  1113.      Originally the inverse is set to be empty.  
  1114.  
  1115. env/prim.sml
  1116.      Let the function "special" return true for all inline primops.
  1117.  
  1118. modules/representation.sml
  1119.      Change the representation of the thinning interface to 
  1120.      add appropriate type coercions when doing signature matching. 
  1121.  
  1122.      Files affected by this:
  1123.         elaborate/elabstr.sml
  1124.         modules/moduleutil.sml
  1125.         modules/sigmatch.sml
  1126.         translate/translate.sml
  1127.  
  1128. modules/representation.sml
  1129. modules/abstractfct.sml
  1130. modules/applyfct.sml
  1131. basics/printbas.sml
  1132. translate/transbinding.sml
  1133.      Add a "fullstr" field to the body of the raw functor FCT in 
  1134.      representation.sml. This field records the body signatures 
  1135.      of any arbitrary raw functors. This info is useful for the
  1136.      representation analysis. 
  1137.  
  1138. translate/transbinding.sml
  1139. translate/transtypes.sml 
  1140.      Add utility functions on the new lambda types lty. All front end
  1141.      static information are converted by utility functions defined in
  1142.      these files into lambda types lty.
  1143.  
  1144. translate/mccommon.sml
  1145. translate/mc.sml
  1146. translate/tempexpn.sml
  1147.      Add appropriate type information into the decision tree in the 
  1148.      match compiler. Coercions are inserted whenever to DECON a 
  1149.      polymorphic data constructor (DELTAPATH).
  1150.  
  1151. translate/translate.sml
  1152.      The new translate module which produces the new intermediate 
  1153.      lambda language. While compiling the whole compiler, the time
  1154.      spent in the translate phase in 89 is about same as that in 88.
  1155.      Also the bug 621 is fixed.
  1156.  
  1157. typing/typecheck.sml
  1158. typing/typecheck.sig
  1159. elaborate/elabstr.sml
  1160.      Change the type-checker to produce the new abstract syntax tree 
  1161.      annotated with type information. 
  1162.      The typecheck function decType now not only does the typechecking 
  1163.      but also modifies the abstract syntax which carries the appropriate 
  1164.      type information into the translate module and the backend.
  1165.  
  1166. --------------------------------------------------------------------------
  1167. Summary:
  1168.  
  1169.  
  1170. 1 file (translate/mcopt.sml) was deleted from 88.
  1171. 2 new files (translate/transtypes.sml, 
  1172.              translate/transbinding.sml) were added into 89.
  1173. 63 files were changed
  1174.  
  1175. List of files changed:
  1176.  
  1177. ./all 
  1178. absyn/absyn.sml 
  1179. absyn/printabsyn.sml 
  1180. basics/lambda.sml 
  1181. basics/printbas.sml 
  1182. basics/typesutil.sig 
  1183. basics/typesutil.sml 
  1184. boot/perv.sml 
  1185. boot/system.sig 
  1186. build/batch.sml 
  1187. build/boot.sml 
  1188. build/compile.sml 
  1189. build/computil.sml 
  1190. build/evalloop.sml 
  1191. build/index.sml 
  1192. build/linkage.sml 
  1193. build/process.sml 
  1194. build/prof.sml 
  1195. codegen/interp.sml 
  1196. codegen/lambdaopt.sml 
  1197. codegen/opt.sml 
  1198. codegen/reopen.sml 
  1199. cps/closure.sml 
  1200. cps/contmap.sml 
  1201. cps/convert.sml 
  1202. cps/cps.sml 
  1203. debug/debugger.sml 
  1204. debug/dprintabsyn.sml 
  1205. debug/instrum.sml 
  1206. debug/queries.sml 
  1207. debug/static.sml 
  1208. debug/util.sml 
  1209. elaborate/elabcore.sml 
  1210. elaborate/elabstr.sml 
  1211. elaborate/elabutil.sml 
  1212. elaborate/misc.sml 
  1213. env/coreinfo.sig 
  1214. env/coreinfo.sml 
  1215. env/environ.sml 
  1216. env/invenv.sml 
  1217. env/prim.sml 
  1218. modules/abstractfct.sml 
  1219. modules/applyfct.sml 
  1220. modules/instantiate.sml 
  1221. modules/moduleutil.sml 
  1222. modules/representation.sml 
  1223. modules/sigmatch.sml 
  1224. parse/ast.sml 
  1225. print/printdec.sml 
  1226. runtime/SPARC.prim.s 
  1227. translate/equal.sml 
  1228. translate/inlineops.sig 
  1229. translate/inlineops.sml 
  1230. translate/mc.sml 
  1231. translate/mccommon.sml 
  1232. translate/mcprint.sml 
  1233. translate/nonrec.sml 
  1234. translate/reorder.sml 
  1235. translate/tempexpn.sml 
  1236. translate/translate.sml 
  1237. translate/unboxed.sml 
  1238. typing/typecheck.sig 
  1239. typing/typecheck.sml 
  1240.  
  1241. (END OF NEWS.89)
  1242. --------------------------------------------------------------------------
  1243.  
  1244. -------------------------------------------------------------------------
  1245. Standard ML of New Jersey, Version 0.88, August 14, 1992
  1246.  
  1247.  
  1248. 116 files were changed and 5 new ones added in this version.
  1249.  
  1250. 1) Added support runtime support for RS6000
  1251.  
  1252. 2) Closures are no longer created in the machine assembly files,
  1253.    but are created in C (see cstruct.c)
  1254.  
  1255.     - Lal    
  1256. --------------------------------------------------------------------------
  1257.  
  1258. 1) Changed the representation of labels used by the scheduler.
  1259.  
  1260.     - Andrew
  1261. --------------------------------------------------------------------------
  1262.  
  1263. 1) Made vector into a primitive builtin type (to support typechecking
  1264.    of vector patterns and exprressions).
  1265.  
  1266. 2) Removed uses of "syscall" in boot/perv.sml to improve portability.
  1267.    Added additional functions to runtime/cfuns.c to support the
  1268.    system calls that were previously implemented using syscall.
  1269.  
  1270. 3) Added a tag to the RECORD constructor in the lexp and cps datatypes.
  1271.    This tag distinguishes records from vectors, so that vector expressions
  1272.    of length 2 get the right tag (i.e., they don't get the pair tag).
  1273.  
  1274.     - John
  1275. --------------------------------------------------------------------------
  1276.  
  1277.     Previously, when two user specified explicit type variables with
  1278. the same name occured in the same scope with different weakness or
  1279. equality requirements (i.e., both '1a and '2a in same scope), they were
  1280. considered different variables.  This is no longer the case.  Such
  1281. occurences now generate errors.
  1282.  
  1283.     A spurious duplicate type variable message is no longer printed.
  1284.  
  1285.     A new function, PrintType.tyvar_printname returns the print name
  1286. of a type variable as a string.  I.e., "'1a", etc.  This is now used
  1287. consistenly throughout the compiler to print out type variables.  This
  1288. had the result of removing a few inconsistenes like user bound variables
  1289. being printed without the U on the end and underscores not always being
  1290. used correctly when System.Control.weakUnderscores was true.
  1291.  
  1292.     - Mark
  1293. --------------------------------------------------------------------------
  1294. 1) Change in the interface of CompileAst:
  1295.  
  1296. CompileAst doesn't require anymore to have the information about the fixity
  1297. of objects currently compiled because it rebuilds it and give it back
  1298. in its result.
  1299.  
  1300. Parse still gives back info about the fixity of objects compiled. It is
  1301. necessary only if the parser is called immediately on other files.
  1302.  
  1303. 2) Changes in the treatment of signatures:
  1304.  
  1305. The behaviour of include in presence of type redefinition has been changed.
  1306. The redefinition of a type is authorised as long as it is not in conflict
  1307. with the previous definition on arity.
  1308.  
  1309. The purpose is to allow the inclusion of multiple signatures refering to a same
  1310. type not yet defined.
  1311.  
  1312. signature a = sig datatype 'a t = c of 'a val x: int t end
  1313. signature b = sig type 'a t val y: bool t end
  1314. signature c = sig type t end
  1315. signature d = sig datatype 'a t = c of 'a end
  1316. signature e = sig type 'a t val x: int t end
  1317.  
  1318. signature b' = sig include a include b end    O.K.
  1319. signature c' = sig include a include c end    error: arity of t
  1320. signature d' = sig include a include d end    error: redefinition by datatype
  1321. signature e' = sig include a include e end    error: redefinition of x
  1322.  
  1323. 3) first class environment:
  1324.  
  1325. There is a new function filterStaticEnv: staticEnv * symbol list -> staticEnv
  1326. System.Env.filterEnv takes care of infixes.
  1327.  
  1328. 4) bug fixes:
  1329.  
  1330. - the Ast is always marked even if System.Control.markAbsyn is set to false
  1331. so the compiler can give relevant error messages 
  1332. - the printed name of types coming from a functor argument has been improved
  1333. - no more second effect bug when an object defined by the specification of
  1334. a functor body is in fact undefined in this body.
  1335. - System.Symbol.makestring is fixed
  1336.  
  1337.     - Cregut
  1338. --------------------------------------------------------------------------
  1339. 1) Cleaned up and improved the pattern matcher.
  1340.  
  1341. 2) Allowed for vector patterns and vector expressions.
  1342.    Vector expressions and patterns are introduced using #[.. ]
  1343.  
  1344. 3) Provided hooks for templates.
  1345.  
  1346.     - Aitken 
  1347.       (more details to be provided.)
  1348. --------------------------------------------------------------------------
  1349. all
  1350. build/debugger.sml -> debug/debugger.sml
  1351.   Moved to a more convenient subdir.
  1352.  
  1353. debug/debugger.sml
  1354. dbguser/commands.sml
  1355. dbguser/emacs.sml
  1356. dbguser/interface.sml
  1357. debug/exec.sml
  1358. debug/motions.sml
  1359.   Changed interface to interpolations.  Routine to set an interpolation now
  1360. returns normally; dbguser/commands.sml then arranges to execute the
  1361. interpolation immediately by performing a jump.
  1362.  
  1363. all
  1364. build/computil.sml
  1365. build/evalloop.sml [new]
  1366. build/inithooks.sml
  1367. build/interact.sml
  1368. cps/shareglue.sml
  1369. debug/debugger.sml
  1370.   Created a new EvalLoop structure to contain the guts of interactive
  1371. loop processing.  Routines in this structure take a large parameter record.
  1372. The Interact and Debugger functors now invoke these routines with 
  1373. appropriate parameters.
  1374.  
  1375. dbguser/commands.sml
  1376. dbguser/interface.sml
  1377. debug/bindings.sml
  1378. debug/debugger.sml
  1379. debug/instrum.sml
  1380. debug/motions.sml
  1381. debug/queries.sml
  1382. debug/static.sml
  1383.   Changes to support breakpoints at "fine-grained" events, not just the heads
  1384. of coalesced event lists ("evn"s).  Instrumenter now produces an array of all 
  1385. fine-grained events; type place (=int) point into this array.  
  1386. Coalesced events are now represented as lists of places, and places are
  1387. by query routines in dbguser/interface.sml. Last binding event numbers are
  1388. no longer computed by instrum.sml nor stored by static.sml.
  1389.  
  1390. debug/instrum.sml
  1391. debug/static.sml
  1392. elaborate/elabutil.sml
  1393. parse/ml.grm*
  1394.   VAL, VALREC, RAISE, LET, and LOCAL events are reported at more
  1395. sensible locations; some additional marking of absyn is required.
  1396. Events from rules automatically added to raise Match exceptions or
  1397. complete handle matches are now located after last character of 
  1398. previous rule, and are no longer returned by eventPlacesAfter/Before.
  1399.  
  1400. all
  1401. basics/symbol.sig
  1402. env/env.sml
  1403. debug/env.sml
  1404. modules/tabify.sml [new]
  1405.   Added support for debugger emulation of TABspaces, using
  1406. functions in tabify.sml to convert ordinary module bindings 
  1407. into TAB bindings.  TABspace is split into four sub-spaces for
  1408. different module types.
  1409.  
  1410. boot/perv.sml
  1411. boot/system.sig
  1412. codegen/interp.sml
  1413.   Added cases to interpret SUBSCRIPTV, FSUBSCRIPTd, FUPDATEd, GETHDLR,
  1414. and SETHDLR to the interpreter.  This required adding all five of these
  1415. to System.Unsafe, and the latter two to the type-safe version of Inline.
  1416.  
  1417. debug/debugger.sml
  1418. debug/static.sml
  1419.   Fixed problem with maintenance of current index.
  1420.  
  1421. dbguser/debugperv.sml
  1422. dbguser/hstore.sml
  1423.   Fixed types of HistoricalArray functions.  
  1424.   Removed tentative versions of HistoricalByteArray and HistoricalRealArray.
  1425.  
  1426. modules/debugmod.sml
  1427.   Fixed check for anonymous parameter name.
  1428.  
  1429. debug/debugger.sml
  1430.   Added type constraint case for ABSTYPEdecs.
  1431.  
  1432. dbguser/load.sml
  1433.   Revised and commented load sequence.
  1434.  
  1435.     - Tolmach-------------------------------------------------------------------------
  1436. Standard ML of New Jersey, Version 0.87, July 31, 1992
  1437.  
  1438. cps/closure.sml 
  1439.    Reverted to its state as of 0.85.
  1440.  
  1441. runtime/SPARC.prim.s
  1442.    Fixed function logb to return 0 on argument of zero.
  1443.  
  1444. runtime/cfuns.c
  1445.    Fixed bugs in ml_blast_out and ml_exec.
  1446.  
  1447. All the other changes have to do with the debugger:
  1448.  
  1449. build/interact.sml
  1450. build/debugger.sml
  1451. cps/nullglue.sml
  1452. cps/shareglue.sml
  1453. debug/interface.{sig,sml} (removed)
  1454. m68/m68glue.sml
  1455. mips/mipsglue.sml
  1456. sparc/sparcglue.sml
  1457. vax/vaxglue.sml
  1458.  
  1459. A new file build/debugger.sml, defining a funsig DEBUGGER and functors
  1460. BogusDebugger and RealDebugger, now controls "top-level" features for 
  1461. the debugger.  It replaces the existing debug/interface file and code 
  1462. that was originally folded into build/interact.sml.
  1463. It uses the guts of interact and eval_stream in build/interact.sml, which
  1464. have been factored out and exported as routines interact0 and eval_stream0.
  1465. A DEBUGGER is now a parameter to IntShare; as before, the bogus version is
  1466. used when debugger support is excluded.  The per-architecture glue modules 
  1467. have been changed accordingly.
  1468.  
  1469. env/dynenv.sig
  1470. env/dynenv.sml
  1471. env/invenv.sig
  1472. env/invenv.sml
  1473.  
  1474.   "Special" dynenv's and invenv's have been added to match special statenv's;
  1475. they are used by the debugger's interactive loop.
  1476.  
  1477. dbguser/userlevel.sml
  1478. dbguser/load.sml
  1479. makeml
  1480.    
  1481.   userlevel has been renamed to load, and makeml adjusted accordingly.
  1482.  
  1483. debug/calctype.sml (removed)
  1484. modules/debugmod.sml
  1485. typing/dyntype.sml
  1486.  
  1487.   File debug/calctype.sml has been replaced with two new
  1488. files supporting type reconstruction.  debugmod.sml is mostly hooks for
  1489. future.  dyntype.sml implements dynamic type reconstruction using callbacks
  1490. to obtain static types of actual arguments to polymorphic functions.
  1491.  
  1492. build/computil.sml
  1493. build/interact.sml
  1494. coder/coder.sml
  1495. cps/cpscomp.sml
  1496.  
  1497.   Changed signature of timemsg and added new utility function infomsg.
  1498.  
  1499. absyn/absyn.sml
  1500. absyn/printabsyn.sml
  1501. boot/perv.sml
  1502. build/index.sml
  1503. elaborate/elabcore.sml
  1504. print/printdec.sml
  1505. translate/translate.sml
  1506.  
  1507.    A new field ident is added to EBgen's to contain the expression to be
  1508. written into the exception ref.   This is explicitly filled by elabcore
  1509. to be the normal thing, i.e., the constructor name; translate now just
  1510. translates the expression normally.  Under the debugger, instrum.sml 
  1511. alters the ident field to be a record consisting of (name,time created).
  1512. This allows the debugger to determine the type of the constructor argument
  1513. and print it correctly if an uncaught exception occurs.
  1514. File boot/perv.sml:exn_name has been altered to distinguish these two cases,
  1515. (the definition of the Tags structure has been moved up to make it useable
  1516. within PreLim.) Other files were changed to reflect adding ident.
  1517.  
  1518. debug/*
  1519. dbguser/*
  1520.   Added proper support for signals and for user-interpolated code fragments.
  1521.   Revised type reconstruction algorithm to obtain static types of arguments
  1522.   via explicit type annotations rather than (partially) reconstructing them
  1523.   at runtime.  Integrated support for most compiler changes since 
  1524.   the late 0.60's  (but type reconstruction based on functor argument types 
  1525.   still doesn't work).   Numerous bug-fixes.
  1526.  
  1527. elaborate/elabstr.sml
  1528. elaborate/frontend.sml
  1529. build/process.sml
  1530. build/compile.sml
  1531. build/interact.sml
  1532.  
  1533.   Added a "translate" pass to the parsing process, which occurs after
  1534. elaboration but before type-checking.  This allows the debugger to insert
  1535. explicit type constraints into the syntax to support dynamic type 
  1536. reconstruction. Everywhere else, an identity transform is inserted.
  1537.  
  1538.  
  1539. parse/ml.grm
  1540.    Restored various forms of source marking that had disappeared since 0.75.
  1541.  
  1542. build/process.sml
  1543.    Added case to function comp to allow batch compilation of funsigs.
  1544.  
  1545. util/arrayext.sml
  1546.    Added new reset and refill functions; made minor efficiency hacks;
  1547.    removed misleading comments on "where used".
  1548.  
  1549. The following outdated or experimental files have been removed from 
  1550. the release:
  1551.  
  1552. dbguser/normperv.sml
  1553. dbguser/system.sml
  1554. dbguser/timeit.sml
  1555. dbguser/usercommands.sml
  1556. dbguser/userlevel.sml
  1557. debug/bindings.sml.save
  1558. debug/bogusdebug.sml
  1559. debug/calctype.sml
  1560. debug/commands.sml
  1561. debug/historyio.sml
  1562. debug/historystore.sml
  1563. debug/instrumr.sml
  1564. debug/interface.{sig,sml}
  1565. debug/nstatic.sml
  1566. debug/nkernel.sml
  1567. debug/ninstrum.sml
  1568. debug/nbindings.sml
  1569. debug/nrun.sml
  1570.  
  1571.  
  1572. Why:
  1573.  
  1574. -------------------------------------------------------------------------
  1575. Standard ML of New Jersey, Version 0.86, July 22, 1992
  1576.  
  1577. From Appel:
  1578.  
  1579. Beware that the sparc,m68,and vax mo files each contain only enough
  1580. to build a self-compiler (batch or interactive), not a cross-compiler.
  1581. Beware also that the mo.mipsb are as compiled by a slightly earlier
  1582. version so you won't get fixed points equal to what's there.
  1583.  
  1584. The last remaining vax in our department is down indefinitely,
  1585. so I haven't tested the vax version (though the mo files are there).
  1586.  
  1587. The profiler now works.  see src/profile/README.
  1588.  
  1589. 0.86 boots on the mipsb, sparc, and NeXT; and compiles itself on the mipsb.
  1590. I haven't done other tests.
  1591.  
  1592. Andrew's Changes from version 0.85 -> 0.86:
  1593.  
  1594. cps/generic.sml, util/intmap.sig, util/intmap.sml:
  1595.     Added new function "Intmap.clear" to delete all the entries
  1596.     from an intmap; generic now calls this from time to time,
  1597.     which cuts down greatly on its memory usage.
  1598.  
  1599. mips/instrset.sml, mips/mipsmc.sml, mips/mips.sml, etc.
  1600.     Made "register" an abstract type, so that it can be represented
  1601.     more compactly and thus save space during scheduling.
  1602.  
  1603. print/printdec.sml:
  1604.     Added a space to a string that was being printed.
  1605.  
  1606. cps/cmachine.sig, cps/generic.sml, mips/mips.sml, mips/instrset.sml,
  1607.     sparc/sparcdepend.sml, sparc/sparc.sml, vax/vax.sml,
  1608.     m68/m68.sml, runtime/MIPS.prim.s, runtime/SPARC.prim.s,
  1609.     runtime/M68.prim.s, runtime/VAX.prim.s, runtime/callgc.c,
  1610.     runtime/cfuns.c, runtime/run_ml.c:
  1611.  
  1612.     The register masks no longer sit right before the back-pointer.
  1613.     Instead, they are passed in a special register (on the stack
  1614.     for the VAX) to the g.c. routine.  This will make it easier
  1615.     (soon) to get rid of the backpointers entirely.
  1616.  
  1617. cps/eta.sml:
  1618.     Changed the uncurry optimization so that 
  1619.         fun f(x) = let fun g(y) =  . . .
  1620.                         in g
  1621.                        end
  1622.         won't be uncurried if g is recursive.  Surprisingly, this worked
  1623.     in CPS; but it wasn't necessarily a useful optimization!
  1624.  
  1625. runtime/signal.c:
  1626.     Changed default handler for SIG_VTALRM per Tolmach's suggestion.
  1627.  
  1628. runtime/M68.prim.s:
  1629.     Made some changes that should have been made 
  1630.     when version 0.84 with trapless g.c. was made.    
  1631.  
  1632. basics/conrep.sml, boot/system.sig, boot/perv.sml, build/batch.sml:
  1633.     Added a flag "newconreps" to allow compiling with the
  1634.     new, more compact (but not quite Standard) constructor representations.
  1635.  
  1636. coder/machinstr.sig:
  1637.     deleted "eqtype register" which nobody used.
  1638.  
  1639. cps/closure.sml: [Zhong Shao, modifying Trevor's changes to closure.sml
  1640.          listed below]
  1641.     Eliminated closures of size one.
  1642.  
  1643. cps/knownfiddle.sml, cps/cpscomp.sml:
  1644.     New optimization, performed just before the closure phase,
  1645.     tries to avoid fetching variables from closures unless they're
  1646.     really needed.
  1647.  
  1648. cps/expand.sml, cps/cpsopt.sml:
  1649.     Improved "loop unrolling."
  1650.     Also, get rid of loop-invariant arguments of loop functions.
  1651.     If !System.Control.CG.unroll=false and CG.invariant=false
  1652.     then it should be equivalent to the old way.
  1653.  
  1654. profile/profile.sml, profile.profperv.sml, profile/script, profile/README
  1655.     Code to be loaded into an interactive system to enable use
  1656.     of the profiler.
  1657.  
  1658. runtime/Makefile:
  1659.     Added some missing dependencies.
  1660. -------------------------------------------------------------------------
  1661. Standard ML of New Jersey, Version 0.85, July 17, 1992
  1662.  
  1663. Major user visible changes:
  1664.  
  1665.     - The behavior of the type checker on flexible records has been
  1666. fixed.  This required altering how flex records were represented
  1667. internally.  Flex record types now in addition to having a weakness
  1668. level, also have an equality flag and a depth level (used to determine
  1669. when to generalize type variables).  This information is now displayed
  1670. when flex types are printed.  Sample outputs:
  1671.  
  1672.         {x:int,'a...}        1 field, x of int type,
  1673.                     not necessarily an equality type,
  1674.                     not weak
  1675.         {x:int,''a...}        as above but an equality type
  1676.         {x:int,'5a...}        as first one but at weakness
  1677.                     level 5
  1678.         {x:int,'a...[3]}    as first, depth is 3.  The depth
  1679.                     information is only printed when
  1680.                     System.Control.internals is true
  1681.                     and the depth is not infinity.
  1682.  
  1683.     The variable name before the "..." is to make it possible to
  1684. tell when two types contain the same flex record.  This is necessary,
  1685. for example, to tell where circularity occurs.
  1686.  
  1687.     - As part of the fix to flex records, a new unifier has been
  1688. installed.  The new unifier is somewhat better at preserving type
  1689. abbreviations during unification.  Other minor differences may be
  1690. noticeable causing slightly different but equivalent types to be
  1691. returned.
  1692.  
  1693.     - When expressions fail to type check, they are assigned type
  1694. WILDCARDty (previously called ERRORty) which matches anything.  This
  1695. allows type checking to proceed without causing redundant/spurious error
  1696. messages.  This type used to print as "error".  It now prints as "_" to
  1697. better reflect its meaning.
  1698.  
  1699.     - Non-strict type abbreviations are handled differently to avoid
  1700. some subtle bugs (see bug #'s 573 & 589 for example).  Whenever a type
  1701. defined using a non-strict type abbreviation is entered, the non-strict
  1702. arguments to the abbreviation are changed to wildcard types (_'s).  This
  1703. effects nothing except internal processing and how the type prints out
  1704. since those arguments go away anyway when the abbreviation is expanded
  1705. out.  Example:
  1706.  
  1707.         - type ('a,'b) FOO = 'a;    (* second arg. non-strict *)
  1708.         type ('a,'b)  FOO = 'a
  1709.         - fn x : ('a,'b) FOO => x;
  1710.         val it = fn : ('a,_) FOO -> ('a,_) FOO
  1711.  
  1712.     - type variables are now considered equal iff their name parts,
  1713. weakness parts, and equality parts are equal instead of if their input
  1714. forms where equal.  I.e., '01a and '1a are now equal whereas before they
  1715. were not.
  1716.  
  1717.     - the lexical definition of type variables have been changed to
  1718. prevent confusing cases such as '_1a.  The grammar is now:
  1719.  
  1720.     type_variable_name ::= '[']{weakness}{identifier}
  1721.     weakness ::= _ | <number> | <empty>
  1722.     identifier ::= <letter><alphanumeric(includes ', _)>*
  1723.  
  1724.     Examples:
  1725.         'a
  1726.         ''a
  1727.         '_abc            (* this is same as '1abc *)
  1728.         '45bc
  1729.         '_this_is_weak
  1730.         'not'this'one
  1731.  
  1732.     - When System.Control.weakUnderscore is true, all type variables now
  1733. have their weakness numbers (if any) replaced by "_" when printing.
  1734. Previously this only happened for some type variables (the IBOUND ones).
  1735.  
  1736.  
  1737. Major internal changes to the compiler:
  1738.  
  1739.     - The representation of types (type ty) was reorganized.  The IBOUND
  1740. case was made a type instead of a kind of variable since it is never
  1741. instantiated and does not need equality, weakness, etc., information
  1742. associated with it.  The FLEXRECORD case was made into a kind of
  1743. variable from a kind of type since it does get instantiated and does
  1744. need equality, weakness, etc., information.
  1745.  
  1746.     Variable information was reorganized to put the common
  1747. information (eq, weakness, depth) in the top level, instead of
  1748. duplicated in each of the cases to make processing easier and more
  1749. uniform.  ERRORty was renamed to WILDCARDty (see user changes for why).
  1750.  
  1751.     - To implement fixing the non-strict type abbreviations, a new
  1752. function TypesUtil.mkCONty was introduced.  This must be used to
  1753. construct CONty types anytime the tycon could be a DEFtyc or an ERRORtyc.
  1754. Failure to do this is an programming error.
  1755.  
  1756.     This routine when given a DEFtyc takes care of changing the
  1757. non-strict arguments to WILDCARDty's.  It does this using the strict
  1758. field of the DEFtyc which is now a bool list instead of just a bool,
  1759. telling exactly which arguments are non-strict.  When given an ERRORtyc,
  1760. mkCONty returns WILDCARDty.  This causes ERRORtyc to have the proper
  1761. matching behavior, etc.
  1762.  
  1763.     Note that this change fixes many (unreported) internal bugs.
  1764. This is because now expanding out type abbrievations and ERRORtyc's does
  1765. not alter the set of type variables in a type.  This means that, for
  1766. example, occurs checks can be done without needing to expand the type
  1767. abbreviation.  Since WILDCARDty's match anything & esp. themselves,
  1768. argumentwise comparison of two CONty's with the same DEFtyc is now
  1769. legal.  Also, routines scanning down types should never have to deal
  1770. with ERRORtyc anymore.
  1771.  
  1772.     - UBOUND variable names no longer contain the weakness and equality
  1773. info, only the name part.  (i.e., ''15abc has name "abc" instead of the
  1774. old "'15abc")
  1775.  
  1776.     - When a type constructor in a functor application fails to match
  1777. the specification, an ERRORtyc is stored instead of the constructor.
  1778. Specification matching has been fixed to allow WILDCARDty's to match
  1779. anything, removing some spurious error messages that used to be produced.
  1780.  
  1781.     - Two new utility functions were introduced:
  1782.  
  1783.     listofarray in ArrayExt
  1784.     zip2 in List2
  1785.  
  1786.  
  1787. Bug fixes:
  1788.     482. "constant" unary type abbreviations in signature matching
  1789.     468. extra comma in printing unit record
  1790.     521. type checking flex records
  1791.     533. typing record types
  1792.     569. failed type inference with flexible records
  1793.     570. flexrecord equality types
  1794.     571. no occurs check when instantiating flexrecords
  1795.     572. unify doesn't update depth for flex record types
  1796.     573. unifier detects spurious cycles with type abbrevs
  1797.     580. compileUnit bug in separate compilation
  1798.     588. wrong printing of flex records with no fields
  1799.     589. occurs check with nonstrict type abbreviations
  1800.     590. Some user type variable names are handled incorrectly.
  1801.  
  1802. -------------------------------------------------------------------------
  1803. Standard ML of New Jersey, Version 0.84, July 5, 1992
  1804.  
  1805. Andrew's Changes June 1992:
  1806.  
  1807. cps/expand.sml:
  1808.     Changed into a two-pass algorithm:  First try ONLY loop
  1809.     unrolling; then try everything else.
  1810.     If !System.Control.CG.unroll=false then it should be equivalent
  1811.     to the old way.
  1812.  
  1813. boot/system.sig, boot/perv.sml:
  1814.     Added new CG flag "unroll", doesn't do anything yet.
  1815.     Moved things to Hooks that should have been there already.
  1816.     Deleted the Profile and ProfileInternals structures.
  1817.     Deleted System.Unsafe.isolate.
  1818.  
  1819. build/interact.sml:
  1820.     Made a local version of "isolate" that checks for escaping
  1821.     top-level continuations.  (The old System.Unsafe.isolate
  1822.     did that PLUS made sure extra variables didn't put in the
  1823.     closure; the new safe-for-space system does that to every
  1824.     closure automatically.)
  1825.  
  1826. build/prof.sml, boot/loader.sml, build/interact.sml, build/computil.sml,
  1827. runtime/run.c
  1828.     New version of profiler no longer builds a lambda expression
  1829.     that returns (executable,profileInfo).  Now only the executable
  1830.     is returned; the profileInfo is automatically installed by the
  1831.     executable itself when it is run.
  1832.  
  1833. runtime/signal.c, boot/perv.sml, boot/system.sig
  1834.     Added SIGPROF and SIGVTALRM as ML signals.
  1835.  
  1836. blast_write returns size in bytes; blast_read now takes size in bytes:
  1837. Note for compatibility:
  1838.    fun old_blast_write(f,a) = (blast_write(f,a); ())
  1839.    fun old_blast_read(f) = blast_read(f, can_input f)
  1840.   
  1841.  
  1842. codegen/lambdaopt.sml:
  1843. Made lambdaopt accomplish what it has to do in one round instead of two.
  1844.  
  1845. cps/cpsopt.sml:
  1846. Eliminated the two rounds of contract before eta, no longer necessary
  1847. given trevor's eta-optimization in convert.
  1848.  
  1849. boot/math.sml
  1850. improved speed and accuracy of sine and cosine (except on vax)
  1851.  
  1852. boot/perv.sml:
  1853. improved speed of doing input(f,k) for very large k from quadratic to linear
  1854.     on NFS.  (Was already good on non-NFS filesystems)
  1855.  
  1856. env/prim.sml:
  1857. made INLUPDATE on integers avoid updating the store list
  1858.  
  1859. cps/reorder.sml: moved to translate/reorder.sml
  1860.  
  1861. translate/reorder.sml: see trevor's changes below; then I made it safe
  1862. for space by never moving a SELECT to the right of an APP.
  1863.  
  1864. build/computil.sml, coder/coder.sml, build/interact.sml, etc:
  1865. Improved gathering of timing statistics for summary.
  1866.  
  1867.  
  1868. Trevor's Changes June 1992:
  1869.  
  1870. CHANGED build/computil to print out versions of lambda if saveLambda
  1871.   is set.  There ought to be another flag for this.
  1872.  
  1873.  
  1874. CHANGED codegen/opt.sml: the function closestr defined in opt.sml sets
  1875.   up the header for the free structures referenced in a piece of
  1876.   lambda.  But it didn't check for duplicates; I fixed this.
  1877.   Also, the function "root" was duplicated as the function "last"; I
  1878.   removed "last".
  1879.  
  1880.  
  1881. Problem with codegen/lambdaopt.sml:
  1882.   lambdaopt will never remove a select, even if the result is not used.
  1883.  
  1884.  
  1885. LambdaOpt (codgen/lambdaopt.sml) is where the names of functions
  1886.   are getting lost: if they are used only once, it inlines them,
  1887.   completely losing the name (since functions are allowed to be
  1888.   nameless in the lambda language).
  1889.  
  1890.  
  1891. TO DO: at least rationalize the lambda printing a bit.  It shouldn't
  1892.   be controlled by saveLambda; there ought to be another variable.
  1893.   It would be nice if we could control just how far the compiler went
  1894.   (have it stop at any phase) and control exactly which phases
  1895.   do printing.
  1896.  
  1897.  
  1898. CHANGED cps/convert.sml: Newly-introduced eta-redexes are reduced
  1899. as soon as they are made, which makes the output of convert.sml 17% smaller.
  1900.  
  1901.  
  1902. CHANGED translate/mc.sml and translate/mcopt.sml so that the function
  1903.   for a rhs of a pattern which binds only one variable does not take a
  1904.   record of that one value as an argument, but rather just the value
  1905.   itself.  The change to mcopt was merely to a type definition, and the
  1906.   changes to mc were minor, consisting of "special case" code in two
  1907.   places, and some cleaning up.
  1908.  
  1909.  
  1910. CHANGED cps/reorder.sml: always leave VARs, INTs, REALs, STRINGs alone
  1911.   when they appear in records, never reorder APP(FN _,_) case.
  1912.  
  1913. CHANGED translate/mcprint.sml: minor fixes.  Affected use of printLexp
  1914.   in translate/mc.sml, possibly ought to change use of printLexp and
  1915.   printFun in build/process.sml, build/computil.sml, codegen/reopen.sml.
  1916.  
  1917.  
  1918. CHANGED runtime/MIPS.prim.s, runtime/cfuns.c, runtime/mask.h
  1919.   to fix no-callee-save/no-share bug.   This bug also caused
  1920.   the failure of 0.82 on the 68020.
  1921.  
  1922. CHANGED boot/perv.sml: minor change to printing of parse time in
  1923.   System.Stats.summary().
  1924.  
  1925. CHANGED build/computil to charge codeopt for the time spent in
  1926.   LambdaOpt.lambdaopt() and Reorder.reorder().
  1927.  
  1928.  
  1929. CHANGED lots of files to modularize the cps stuff.  Previously the
  1930.   convert phase was done in build/computil.sml, with some of the lambda
  1931.   stuff.  I've removed it from there and put it in cps/cpscomp.sml.
  1932.   There were lots of bogus changes because the types of signatures
  1933.   changed.  A detailed list of changes follows:
  1934.  
  1935.  
  1936. CHANGED cps/cpscomp.sml: cleaned up printing (messages, codesize,
  1937.   and the cexp's).
  1938.  
  1939. CHANGED build/batch.sml: removed duplicate flags printit and ifidiom.
  1940.  
  1941. CHANGED cps/size.sml: to print total as well as cells, descriptors.
  1942.  
  1943. CHANGED build/batch.sml: it now records codesize stat, just as does
  1944.   build/interact.sml.
  1945.  
  1946. CHANGED build/interact.sml: the function codegen was improperly
  1947.   charging time to the codegen phase; all the timing stats are kept
  1948.   in cps/cpscomp.sml.
  1949.  
  1950. CHANGED all: no longer compiles cps/closure1.sml.
  1951.  
  1952. DELETED cps/closure1.sml
  1953.     (its functionality was merged into cps/closure.sml)
  1954.  
  1955. CHANGED cps/cpscomp.sml: to get rid of ClosureCallee special case.
  1956.  
  1957. CHANGED cps/profile.sml, cps/closure1.sml, cps/spill.sml,
  1958.         cps/cpscomp.sml, build/batch.sml, all
  1959.   Reimplemented allocation profiling; renamed profile.sml to
  1960.   allocprof.sml.  The type of closeCPS and spill have changed; they no
  1961.   longer take a profiling hook.
  1962.  
  1963. CHANGED runtime/run_ml.c
  1964.   To set up varptr for allocation profiling.
  1965.  
  1966. CHANGED makeml
  1967.   To add -g flag.
  1968.  
  1969. CHANGED boot/perv.sml, boot/system.sig, build/batch.sml, cps/closure1.sml
  1970.   Changed flag System.Control.CG.profile to System.Control.CG.allocprof.
  1971.  
  1972. CHANGED boot/perv.sml, boot/system.sig, build/batch.sml, build/computil.sml,
  1973.   Added flag System.Control.CG.printLambda.
  1974.  
  1975. CHANGED boot/perv.sml: loop unrolling of @, map.
  1976.  
  1977. CHANGED cps/generic.sml: moved code that counts known/escaping
  1978.   functions into closure.sml
  1979.  
  1980. CHANGED cps/contmap.sml, cps/freemap.sml: for closure changes.
  1981.  
  1982. ---------------------------------------------
  1983.  
  1984. Interesting or useful things to do:
  1985.  
  1986. Write paper about efficient cps conversion.
  1987.  
  1988. Improve lookup in closure phase to make compilation faster.
  1989.  
  1990. Measure register targeting to see if that's really the problem.
  1991.  
  1992. Better optimize net size of callee-save continuations
  1993.  
  1994. Do safe-for-space linked closures
  1995.  
  1996. Fix Reppy's bug:
  1997.     For each fix F defining an escaping function whose body
  1998.     calls a known function h, inverse-eta-reduce h' in the same fix
  1999.       
  2000. Do better register/closure allocation.
  2001.  
  2002.  
  2003. -------------------------------------------------------------------------
  2004. Standard ML of New Jersey, Version 0.83, June 12, 1992
  2005.  
  2006. Higher Order Functors
  2007. ---------------------
  2008.  
  2009. Functors can be declared inside structures. Therefore, they can be 
  2010. arguments or results of other functors.
  2011.  
  2012. Functors can be described by functor signatures. A functor signature
  2013. is specified in the following way:
  2014.  
  2015. funsig <ident>(<argument specification>) = <signature body>
  2016.  
  2017. - <ident> identifies the name given to the functor signature,
  2018. - <argument specification> specifies the formal parameters. It has
  2019.   the same syntax as formal argument specifications in functors,
  2020. - <signature body> is a regular signature body (i.e. either a
  2021.   signature variable or a sig ... end expression).
  2022.  
  2023. In signatures, functor signatures must be used to specify functor components.
  2024. The syntax of a specification is the following:
  2025.  
  2026. functor <ident functor>: <ident funsig>
  2027. functor <ident functor> (<argument specification>) : <signature body>
  2028.  
  2029. A functor can now be declared in two different ways:
  2030.  
  2031. - full definition of the argument and the body:
  2032. functor <ident functor> (<argument specification>): <optional signature body> =
  2033.   <structure body>
  2034. - restriction of an already existing functor:
  2035. functor <ident functor> : <optional functor signature ident> = <functor ident>
  2036.  
  2037. They can be used either at toplevel or inside a structure.
  2038.  
  2039. Abstract syntax trees
  2040. ---------------------
  2041.  
  2042. An external version of SML raw abstract syntax trees is now available.
  2043. The corresponding datatype is defined in System.Ast .
  2044.  
  2045. Two functions are provided to use it with the compiler. They are defined in
  2046. System.Compile .
  2047.  
  2048. - val parse       : source * staticEnv -> ast * staticEnv
  2049. takes a source describing an input stream and gives back the ast of the
  2050. expression contained with an environment containing informations about
  2051. the infix variables defined.
  2052.  
  2053. - val compileAst  : ast * staticEnv -> compUnit
  2054. takes an Ast and an environment to interpret it and produces a compiled unit
  2055. that can be executed.
  2056.  
  2057. Infix annotations are built by the functions infixleft and infixright.
  2058.  
  2059.  
  2060. New files to support higher-order functors and exported
  2061. abstract syntax:
  2062.   elaborate/elabcore.sig
  2063.   elaborate/elabcore.sml
  2064.   elaborate/elabsig.sig
  2065.   elaborate/elabsig.sml
  2066.   elaborate/elabstr.sml
  2067.   elaborate/elabutil.sig
  2068.   elaborate/elabutil.sml
  2069.   elaborate/frontend.sml
  2070.   elaborate/misc.sig
  2071.   elaborate/misc.sml
  2072.   elaborate/normalize.sml
  2073.   elaborate/tyvarset.sml
  2074.   modules/extern.sml
  2075.   modules/modules.sig
  2076.   modules/modules.sml
  2077.   modules/representation.sml
  2078.   parse/ast.sml
  2079.   parse/astutil.sig
  2080.   parse/astutil.sml
  2081.  
  2082. Deleted files:
  2083.   absyn/bareabsyn.sig
  2084.   absyn/bareabsyn.sml
  2085.   modules/sigmatch.sig
  2086.   parse/corelang.sml
  2087.   parse/misc.sig
  2088.   parse/misc.sml
  2089.   parse/normalize.sml
  2090.   parse/parse.sml
  2091.   parse/signs.sml
  2092.   parse/strs.sml
  2093.   parse/tyvarset.sml
  2094. -------------------------------------------------------------------------
  2095. Standard ML of New Jersey, Version 0.81, 15 May 1992
  2096.  
  2097. **************************************************************************
  2098.                 WARNING
  2099. **************************************************************************
  2100. This is a development version of Standard ML of New Jersey.  As such it
  2101. is untested and may be broken in various serious ways.  For instance, this
  2102. version will not build on M680x0 based machines.  Use at your own risk.
  2103. **************************************************************************
  2104.  
  2105.  
  2106.    - New GC linkage mechanism summary:
  2107.  
  2108.     limit checks only on minimum feedback vertex set
  2109.     limit checks by conditional branch.  Address of saveregs at fixed 
  2110.      position in stack frame.  Address of limit check in register 31 
  2111.      (or %o7, or whatever).
  2112.     Register "stdlink" used to pass address of any non-continuation escaping
  2113.      function being called (also address of non-callee-save continuations
  2114.      function code pointers).  For known funcs, stdlink can be used as 
  2115.      ordinary register just like stdarg, stdcont, etc.  This eliminates need
  2116.      for bltzal or call instruction to get program counter.
  2117.     For callee-save continuations, the code address is passed in the stdcont
  2118.      register (where it was already sitting).
  2119.     The closure phase now makes the stdlink register an explicit argument,
  2120.      so the arguments for standard non-continuations are:
  2121.        stdlink stdclos stdarg stdcont [ calleesave1 calleesave2 ...]
  2122.     and the arguments of standard continuations are:
  2123.        stdcont stdarg  [ calleesave1 calleesave2 ...]
  2124.  
  2125.  
  2126.  
  2127.   - made the objlength primop visible as System.Unsafe.objLength
  2128.  
  2129.   - added the Fail exception to General
  2130.  
  2131.   - restored "use" to General
  2132.  
  2133.   - new primops for handling "special" objects (weak pointers and
  2134.     suspensions).  Added the structure System.Unsafe.Susp for the
  2135.     supporting suspensions, and removed force and delay from Unsafe.
  2136.  
  2137.   - added gettag primop and modified polyequal to use it.  Polyequal
  2138.     is now ready for the new GC.
  2139.  
  2140.   - 'makeml sgi3', for SGI running IRIX 3.3.x and, 'makeml sgi'
  2141.     for ANSI C conforming IRIX (i.e. 4.0.x)
  2142.  
  2143. Bug fixes:
  2144.     448. failure to build on MIPS 6280
  2145.     488. wrong types in pervasives
  2146.     498. bad function type in perv.sig
  2147.     520. broken under IRIX 4.0.1
  2148.     522. redundent patterns in compiler
  2149.     546. System.architecture not initialized
  2150.     551. large integers yield Illegal instruction
  2151.     xxx. space leak.
  2152. -------------------------------------------------------------------------
  2153. Standard ML of New Jersey, version 0.80, April 2, 1992
  2154.  
  2155. 1. WARNING!!! -- Import gone.
  2156.  
  2157. The "import" keyword and the old import-style separate compilation
  2158. have been removed.  src/sepcomp no longer exists.  For separate
  2159. compilation, use the new version of sourcegroup (V2.0) available soon
  2160. from CMU.  This new version will rely on the new environment and
  2161. compilation structures described below, as well as the new persistent
  2162. stamps.
  2163.  
  2164.  
  2165. 2. First class environments
  2166.    System.Symbol and System.Env have been added with signatures:
  2167.  
  2168.     signature SYMBOL =
  2169.     sig
  2170.       type symbol
  2171.       val valSymbol : string -> symbol
  2172.       val tycSymbol : string -> symbol
  2173.       val sigSymbol : string -> symbol
  2174.       val strSymbol : string -> symbol
  2175.       val fctSymbol : string -> symbol
  2176.       val fixSymbol : string -> symbol
  2177.       val name      : symbol -> string
  2178.       val makestring: symbol -> string
  2179.       val kind      : symbol -> string
  2180.     end
  2181.  
  2182.     signature ENVIRONMENT =
  2183.     sig
  2184.       type environment
  2185.       type staticEnv
  2186.       val emptyEnv     : unit -> environment
  2187.       val concatEnv    : environment * environment -> environment
  2188.       val layerEnv     : environment * environment -> environment
  2189.       val staticPart   : environment -> staticEnv
  2190.       val layerStatic  : staticEnv * staticEnv -> staticEnv
  2191.       val filterEnv    : environment * symbol list -> environment
  2192.       val catalogEnv   : staticEnv -> symbol list
  2193.       val describe     : staticEnv -> symbol -> unit
  2194.       val pervasiveEnvRef : environment ref
  2195.       val topLevelEnvRef : environment ref
  2196.     end
  2197.  
  2198. The strings returned by Symbol.kind are a bit unwieldy.  They could be
  2199. shortened, but it may be better to externalize the namespace datatype and
  2200. have replace Env.kind with a namespace function.  See note on
  2201. Environments and Compilation (doc/compile.doc).
  2202.  
  2203.  
  2204. 3. Compilation
  2205.  
  2206. The new structure System.Compile provides the basic hooks for separate
  2207. compilation.  These facilities should support a type secure
  2208. replacement for the current batch compiler and should be used in the
  2209. bootstrap process as well.  The signature is:
  2210.  
  2211.     signature COMPILE =
  2212.     sig
  2213.       structure IO : sig type instream type outstream end
  2214.       type source
  2215.       type staticUnit
  2216.       type codeUnit
  2217.       type compUnit
  2218.       exception Compile of string
  2219.       val makeSource  : string * int * IO.instream * bool * IO.outstream -> source
  2220.       val closeSource : source -> unit
  2221.       val changeLvars : staticUnit -> staticUnit
  2222.       val elaborate   : source * staticEnv -> staticUnit
  2223.       val compile     : source * staticEnv -> staticUnit * codeUnit
  2224.       val execute     : (staticUnit * codeUnit) * environment -> environment
  2225.       val eval_stream : IO.instream * environment -> environment
  2226.       val use         : string -> unit
  2227.       val use_stream  : IO.instream -> unit
  2228.     end
  2229.  
  2230. Note that use and use_stream have been moved to System.Compile, which
  2231. is not open by default.  An environment based eval_stream has been
  2232. added.  These three functions use the top-level evaluation loop and
  2233. can handle arbitrary ML input.  The other compilation functions
  2234. (elaborate, compile, execute) handle only module declarations.
  2235.  
  2236. NOTE: "use" has been bound at top level in the makeml startup script,
  2237. but "use_stream" is not bound at top level and must be referred to as
  2238. "System.Compile.use_stream."
  2239.  
  2240.  
  2241. 4. Dynamic environments.
  2242.  
  2243. The implementation of dynamic environments (DynamicEnv in env/dynenv.*)
  2244. is slightly incomplete.  The remove function is not fully implemented.
  2245. This implementation is supposed to be replaced by a purely applicative
  2246. version of dynamic environments.
  2247.  
  2248.  
  2249. 5. Persistent stamps.
  2250.  
  2251. Persistent stamps have been implemented by Emden Gansner.  These allow
  2252. open structures and functors (i.e. structures and functors with free
  2253. references to other modules) to be separately compiled in a type-secure
  2254. way.
  2255.  
  2256.  
  2257. 5. Top level loop.
  2258.  
  2259. The toplevel loop in build/interact.sml has been simplified.
  2260. Debugging hooks have been deleted and will have to be restored, one
  2261. hopes in a cleaner fashion.
  2262.  
  2263. The isolate function is still used.  It could possibly be simplified
  2264. or eliminated, but the code to verify the top-level context of
  2265. continuations is still necessary (see bug 145).
  2266.  
  2267. The interface to the profiler could possibly be simplified.
  2268.  
  2269.  
  2270. 6. Changed files.
  2271.  
  2272. The following files changed between 0.79 and 0.80.
  2273.  
  2274. absyn/bareabsyn.sig
  2275. absyn/bareabsyn.sml
  2276. absyn/printabsyn.sml
  2277. basics/basictypes.sig
  2278. basics/basictypes.sml
  2279. basics/symbol.sig
  2280. boot/perv.sig
  2281. boot/perv.sml
  2282. boot/system.sig
  2283. build/batch.sml
  2284. build/boot.sml
  2285. build/compile.sml
  2286. build/computil.sml
  2287. build/freelvar.sml
  2288. build/index.sml
  2289. build/inithooks.sml
  2290. build/interact.sml
  2291. build/linkage.sml
  2292. build/process.sml
  2293. codegen/opt.sml
  2294. codegen/reopen.sml
  2295. cps/shareglue.sml
  2296. debug/env.sml
  2297. env/coreinfo.sig
  2298. env/coreinfo.sml
  2299. env/dynenv.sig
  2300. env/dynenv.sml
  2301. env/env.sml
  2302. env/environ.sig
  2303. env/environ.sml
  2304. env/invenv.sig
  2305. env/invenv.sml
  2306. env/prim.sml
  2307. env/statenv.sig
  2308. env/statenv.sml
  2309. lex/ml.lex
  2310. lex/ml.lex.sml
  2311. modules/moduleutil.sig
  2312. modules/moduleutil.sml
  2313. parse/base.sml
  2314. parse/ml.grm
  2315. parse/ml.grm.sig
  2316. parse/ml.grm.sml
  2317. parse/parse.sml
  2318. print/printdec.sml
  2319. sepcomp/sepcomp.sml
  2320. translate/translate.sml
  2321. util/intmap.sig
  2322. util/intmap.sml
  2323.  
  2324.  
  2325. 7. Building 0.80 booting from earlier versions
  2326.  
  2327. Before compiling 0.80 with an earlier version of the compiler.
  2328.  
  2329. 1. comment out the body of the InitHooks functor in
  2330. build/inithooks.sml.
  2331.  
  2332. 2. temporarilty redefine the Compile exception in the CompileUnit
  2333. functor as
  2334.   exception Compile of string
  2335.  
  2336. 3. temporarily redefine the topLevelEnvRef and pervasiveEnvRef
  2337. variables as
  2338.   val topLevelEnvRef : environment ref = ref emptyEnv
  2339.   val pervasiveEnvRef : environment ref = ref emptyEnv
  2340.  
  2341. After compiling with ~mBoot commented out, copy the Initial.mo,
  2342. Math.mo, and CoreFunc.mo files from the earlier compiler into
  2343. the new mo directory.  Then rebuild the batch compiler
  2344.  
  2345. 1. remove comments in build/inithooks.sml
  2346.  
  2347. 2. restore original definition of exception Compile in build/compile.sml
  2348.  
  2349. 3. restore original definitions topLevelEnvRef and pervasiveEnvRef in
  2350. env/environ.sml
  2351.  
  2352. 4. remove comment from ~mBoot line in all file.
  2353.  
  2354. and recompile.-------------------------------------------------------------------------
  2355. Standard ML of New Jersey, Version 0.79, April 1, 1992.
  2356.  
  2357. New object descriptor format
  2358.  
  2359. Datatype representation optimization disabled
  2360.  
  2361. New update primops
  2362.  
  2363. fnegd and real primops
  2364.  
  2365. Polyeq now knows that 0.0 and -0.0 are equal (because of new tags).
  2366.  
  2367.  
  2368. limit checks now done by conditional branch instead of trap
  2369.  
  2370. most known functions don't have limit checks (or backpointers,
  2371.            or register masks) any more.
  2372.  
  2373. blast_write fixed to allow several sequential blasts to same file.
  2374.  
  2375. -------------------------------------------------------------------------
  2376. Standard ML of New Jersey, Version 0.78, February 26, 1992 (batch compiler)
  2377.  
  2378. 1. The mips code generator has been rewritten to use a machine 
  2379. independent scheduler, with a novel algorithm for scheduling
  2380. in the presence of span dependent instructions. The new code 
  2381. generator is 41% faster than v0.77 and allocates 67% of the 
  2382. memory allocated by v0.77.
  2383.  
  2384. A summary of some important numbers when  compiling the compiler 
  2385. upto parse/parse.sml on a mips magnum (walrus) is shown below:
  2386.  
  2387.                0.75      0.76     0.77     0.78    
  2388.     ---------------------------------------------------------------
  2389.     user time (sec)        1278      2500     1268      901
  2390.     sys time  (sec)          18        33       19       18
  2391.     gc time   (sec)         370       601      310      302
  2392.     minor collections        2689      4506     3563     3365
  2393.     major collections          55        70       49       60
  2394.     allocation (bytes)   8115828  17521624  9697719  6138500
  2395.     code size (bytes)    1189392   1194924  1295172  1347912
  2396.  
  2397. -------------------------------------------------------------------------
  2398. Standard ML of New Jersey, Version 0.77, February 24, 1992 (batch compiler)
  2399. 1. Separate compilation:
  2400. The compiler now supports the separate compilation of structures,
  2401. and the loading of separately compiled modules containing free 
  2402. references to other structures and functors.
  2403.  
  2404.  
  2405. 2. Fixed safe-for-space bugs. 
  2406. The "bugs" were:
  2407.  
  2408.     1.  improper hoisting in making "recordpath" optimizations in cpsopt
  2409.     2.  improper hoisting, moving SELECT expressions downward in lambdaopt
  2410.     3.  callee-save closure sharing
  2411.  
  2412. The graph shows the amount of live data during each phase 
  2413. of the compiler.  The input file is perv.sml.  The X's show the size 
  2414. of live data at a major collection during the given phase; the vertical
  2415. bars | show what happens in a different run with an improved version 
  2416. of the lambdaopt and contract phases.
  2417.  
  2418. The *'s show what happens when the executable code for the compiler 
  2419. itself has been compiled using "safe-for-space" techniques.  
  2420.  
  2421.          each X represents 100 Kbytes of live data
  2422.  
  2423. parse        XXXXXXXXXXXXXXX*XXX|
  2424. semantics    XXXXXXXXXXXXXXX*XXX|
  2425. translate    XXXXXXXXXXXXXX|XXX
  2426. lamopt/cnvrt XXXXXXXXXXXXXXXXXX*XXXXXXXXX|XXX
  2427. contract     XXXXXXXXXXXXXXXXXXXXXXX*XXXXXXXXXXXX|XX
  2428. closure      XXXXXXXXXXXXXXXXXXXXXXXX*XXXXXXXXXXXXXXXXXXX|XXXX
  2429. generic      XXXXXXXXXXXXXXXXXXXXXXXXXXX*XXXXXXXXXXXXXXX|XXXXXXXXXXXX
  2430. assemble     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*XXXXXXXXXXXXXXXXX|X
  2431.  
  2432.  
  2433. 3. Data Representation Changes:
  2434.  
  2435. In compiling the compiler, it appears that g.c. time goes from 
  2436. 846->788  (7% savings) and total execution time goes from 
  2437. 3839->2882 (25% savings).
  2438.  
  2439. -------------------------------------------------------------------------
  2440. Standard ML of New Jersey, Version 0.76, 10 October, 1991
  2441.  
  2442. Beta reduction of functions called only once is performed
  2443. on the lambda representation. Also functions never used are 
  2444. eliminated. (See file codegen/lambdaopt.sml)
  2445.  
  2446. The PRIMOP constructor for cps expressions has been broken
  2447. up into BRANCH, SETTER, LOOKER, ARITH and PURE.
  2448. (See the file cps/cps.sml)
  2449.  
  2450. All frontend primop names have been capitalized. Some name changes have
  2451. also been made, e.g. fadd is now FADDd ..., eql is now POLYEQL,
  2452. + is now IADD, etc. (See file basics/access.sml)
  2453.  
  2454. cmachine instructions cvti2d and fnegd has been introduced on all machines
  2455. except the mips. (See cps/cmachine.sig)
  2456.  
  2457. The real primop (int -> real) has been implemented in terms of 
  2458. cvti2d but is not presently used. (See cps/generic.sml)
  2459.  
  2460. Bugs fixed:
  2461.  
  2462. 455 - failure to handle Real.Div - sparc scheduling problem
  2463. 456 - corrupted heap with preemptive threads - error in callee saves fp regs.
  2464. 457 - type reported for Real.ceiling was wrong - no types for InLine.cast
  2465. 459 - infinite loop in signature matching
  2466. 460 - identical to 459
  2467. -------------------------------------------------------------------------
  2468.  
  2469. Standard ML of New Jersey, Version 0.75, 11 November, 1991
  2470.  
  2471. Bugs fixed:
  2472. 451. sharing constraints
  2473. 453. unhandled exception crashes sml
  2474. -------------------------------------------------------------------------
  2475.  
  2476. Standard ML of New Jersey, Version 0.74, 10 October, 1991
  2477.  
  2478. Changes since 0.70:
  2479.  
  2480.   System.system now has the signature
  2481.     val system : string -> int
  2482.   where it returns the Unix status code of the sub-process.
  2483.  
  2484.   The IO.execute function has a different signature and two forms:
  2485.     val execute : (string * string list) -> (instream * outstream)
  2486.     val execute_in_env : (string * string list * string list)
  2487.           -> (instream * outstream)
  2488.   The first of these allows command-line arguments to be passed
  2489.   to the  program; the second also allows an environment to be
  2490.   specified.  In both cases, the base name of the first argument
  2491.   is prepended to the argument list.
  2492.  
  2493.   The module system has been reimplemented.
  2494.  
  2495.   Structure Compile added to pervasives to support Gene Rollins'
  2496.   sourcegroups separate compilation system.
  2497.  
  2498. Bugs fixed:
  2499. 253. SML Dumping core compiling mlyacc with -pervshare
  2500. 274. weakness lost with flex record pattern
  2501. 283. openread (run.c) checking
  2502. 294. weak polymorphic types
  2503. 306. list printing, printlength
  2504. 321. top level polymorphic exceptions allowed
  2505. 334. adjust_limit in M68.prim.s
  2506. 335. Dave Berry's library won't compile
  2507. 337. double error message
  2508. 342. execute destroys the unix-environment
  2509. 354. SIGILL bug on SPARC (actually fixed in 0.70)
  2510. 393. type abbreviations not transparent
  2511. 407. create_v_v for SPARC
  2512. 410. inlining property not preserved in simple renaming
  2513. 413. System and IO problems
  2514. 414. getWD wrong
  2515. 418. repeated type names in type declarations
  2516. 419. Runbind
  2517. 422. overflow on int to real conversion
  2518. 424. IO.execute on SPARC
  2519. 426. type printing
  2520. 427. Compiler bug: defineEqTycon/eqtyc
  2521. 431. ml_writev
  2522. 432. corrupted (shell) environment
  2523. 433. lexgen bug
  2524. 435. patrow syntax
  2525. 439. lexgen
  2526. 441. parsing large positive integers
  2527. 444. large constants and Overflow
  2528. 447. identity type abbreviation
  2529.  
  2530. ----------------------------------------------------------------------
  2531. Standard ML of New Jersey, Version 0.73, 10 September 1991
  2532.  
  2533. Changes since 0.70:
  2534.  
  2535. Arrays now follow the new "standard" agreed on by all implementors:
  2536. structure Array is no longer open by default, sub must be infixed
  2537. by the user. There is also a new Vector structure for immutable arrays.
  2538. See doc/array. Floating arrays have been implemented.
  2539.  
  2540. Two new primops have been added to support floating arrays 
  2541. and an assembly routine for vector creation.
  2542.  
  2543. The module system is internally rewritten, and should be more
  2544. robust and efficient.
  2545.  
  2546. System.Control.timings used to print timings
  2547. under the title 'codegen:' twice. One was really generic 
  2548. and the other was the sum from convert through to the end 
  2549. of scheduling/backpatching. The first is renamed to be 'generic:'.
  2550.  
  2551. Large number of changes have been made to the runtime system
  2552. to support multiprocessing. The main change is that all runtime 
  2553. globals have been added to the MLState vector. A pointer to the  
  2554. MLState vector is saved on the stack and is now passed as an 
  2555. arguement to all the runtime routines  that uses its components.
  2556.  
  2557. Multiprocessing specific support routines (e.g., g.c.) have 
  2558. been added.
  2559.  
  2560.  
  2561. Bugs fixed:
  2562.  
  2563. 4. duplicate specifications not checked
  2564. 242. incorrect forward referencing allowed
  2565. 267. sharing again
  2566. 276. overriding included value spec
  2567. 277. incorrect "inconsistent equality property" error
  2568. 280. included infix specs not printed
  2569. 281. Import bombs out when it can't find files.
  2570. 296. patch for HP/MORE
  2571. 301. Compiler bug: tycPath
  2572. 303. bad error reporting
  2573. 304. SIGEMT on sparc
  2574. 307. signature matching in 0.69
  2575. 319. bad weakness degree (not weak enough)
  2576. 324. bulletproofWrite dies in a bad way when out of disk space
  2577. 330. comments bug
  2578. 349. function names in FUN not checked for uniqueness
  2579. 359. indexing 
  2580. 361. Error: Compiler bug: Functor.applyFunctor.insttyc
  2581. 365. fixed size of tuples causes bug
  2582. 366. lookahead
  2583. 368. missing exceptions
  2584. 369. bug in MLYACC
  2585. 370. Wrong definition of div & mod in perv.sml
  2586. 373. bug in printing fully qualified structure names
  2587. 374. mod overflows on some negative numbers
  2588. 377. prop.sml has bug
  2589. 378. Error: Compiler bug: Functor.applyFunctor.redoTycs 1
  2590. 382. missing \n on infix echo
  2591. 383. open in nested structures fails with "Runbind"
  2592. 386. printing bug with abstype
  2593. 391. truncate
  2594. 400. problem parsing weak types
  2595. 404. std_out not flushed on read from std_in
  2596. 405. identifiers starting with underscores are incorrectly allowed
  2597. 406. funny signatures in 0.71
  2598.  
  2599. --------------------------------------------------------------
  2600. Standard ML of New Jersey, Version 0.70, 1 July 1991
  2601.  
  2602. Changes since 0.69:
  2603.  
  2604. Support for NeXT version 2.0.  
  2605.  
  2606. Callee-save registers (for 7% better performance on MIPS and 18% on SPARC).
  2607.  
  2608. In-line array update and subscript (for 25% better performance on
  2609. "real" programs that use arrays; program that do nothing but array accesses
  2610. are twice as fast).
  2611.  
  2612. Experimental new primitives "getvar" and "setvar" intended for use
  2613. in multiprocessor versions of SML/NJ.
  2614.  
  2615. Bug fixes:
  2616. 86. incorrectly allows redefining of "="
  2617. 221. profiling broken
  2618. 272. generalizing user bound type variables
  2619. 276. weak polymorphism
  2620. 286. Compiler bug: inststr NULLstr
  2621. 308. Mips RC6280 code generation bug  (but 6280 still has other problems)
  2622. 309: NeXTstation exported image doesn't work
  2623. 320. bad weakness degree (too weak)
  2624. 347. dec function in fastlib wrong
  2625. 348. connect_inet bug 
  2626. 351. gc messages bug
  2627. 352. gc statistics bug
  2628. 363. bug in 0.69 interpreter
  2629. 364. bug in lexgen doc
  2630. 380. regbind compiler bug
  2631. 384. signal handler never re-installed
  2632. 389. stats 
  2633. 397. Unsafe.update with constant
  2634. Various flake-outs with ML signal-handlers have been fixed.
  2635. ---------------------------------------------------------------------
  2636. Standard ML of New Jersey, Version 0.69, 3 April 1991
  2637.  
  2638. Changes since 0.66:
  2639.  
  2640. Floating-point programs should run twice as fast (thanks to Lal George).
  2641.  
  2642. Conforms more closely to the syntax in the Definition, so that
  2643. 1+if... doesn't work anymore; use parentheses:  1+(if...)
  2644. Similarly for "case" and "fn".
  2645.  
  2646. New primitives "capture" and "escape" that are like callcc
  2647. and throw but do NOT preserve the exception handler of the saved
  2648. continuation.  
  2649.  
  2650. Hexadecimal integer literals like 0x5e48.  
  2651.  
  2652. Lots of minor bug fixes:
  2653.  
  2654. 231. equality property of DEFtyc
  2655. 243. include compiler bug
  2656. 288.  extraneous "match not exhaustive" warning
  2657. 289. 0.65 prerelease  core dumps
  2658. 295. Compiler bug: r_o in mcopt
  2659. 300. uncaught exceptin RegBind
  2660. 305. Strange floating point error
  2661. 311. abstype bug
  2662. 318. rebinding of type operator "*"
  2663. 326.  very big arrays
  2664. 327. large constants cause overflow in compilation
  2665. 328. callcc not tail recursive
  2666. 329. checkopen broken
  2667. 331. type variable generalized wrongly
  2668. 333. code generation bug
  2669. 339. type = allowed
  2670. 357. import broken
  2671. 358. import & pervasives
  2672. 362. missing primop in interp
  2673. 367. Decstation mach recompolation to m68
  2674. 372. open in signature causes compiler bug
  2675. 375. overflow bugs
  2676. 376b. parsing
  2677. 385. SIGHUP, SIGQUIT, SIGTERM ignored sometimes
  2678. 387. arrays on Sparc
  2679. 388. * as label of record
  2680. 392. two type constraints
  2681. 394. strange message in 0.66 typechecker
  2682. 396. unbound variables should have type ERRORty
  2683. 399. Vax dumps core
  2684. 401. Imperative types in SML/NJ 0.66
  2685. 403. 0.0/0.0 not properly handled
  2686. ---------------------------------------------------------------------
  2687. Standard ML of New Jersey, Version 0.66, 2 October 1990
  2688.  
  2689. Changes since 0.65:
  2690. 1) added exception Interrupt to General.  This was done so that programs
  2691.   that use Interrupt in patterns won't break.  The exception is NEVER
  2692.   raised by the run-time.  The signals mechanism should be used to handle
  2693.   SIGINT, but see doc/SIGINT for a simple way of modifying a top-level
  2694.   loop to deal with SIGINT.
  2695.  
  2696. 2) added the function "pause" to System.Signals.  This is essentially the
  2697.   UNIX sigpause(2) system call.  It blocks SML until a signal occurs.
  2698.  
  2699. 3) The BASICIO signature (which was empty) was removed from perv.sig.
  2700.  
  2701. Bug fixes:
  2702.  
  2703. 275. illegal token with structure named ?
  2704. 277. incorrect "inconsistent equality property" error
  2705. 279. big integers causing uncaught exception
  2706. 287. cosine function incorrectly defined
  2707. ---------------------------------------------------------------------
  2708. Standard ML of New Jersey, Version 0.65, 10 September 1990
  2709.  
  2710. New features:
  2711.  
  2712. A new outstream, std_err, has been added to the IO structure.  It is
  2713. connected to the standard UNIX error stream.
  2714.  
  2715. There is now a general mechanism for handling UNIX signals.  The file
  2716. doc/papers/ml-signals.ps is the postscript for a paper that describes
  2717. the mechanism (Cornell University TR 90-1144).
  2718.  
  2719. Bugs fixed:  (complete descriptions are in doc/masterbugs)
  2720. 223. nontty standard input and uncaught exceptions
  2721. 232. user bound type variable in exception declaration 
  2722. 234/261. Compiler Bug: abstractBody.abstractType 1
  2723. 235. repeated type variables in typdesc and datdesc
  2724. 241. sharing constraint error ignored
  2725. 244. compiler bug on product of large integer constants on SPARC
  2726. 245. NeXT installation problem
  2727. 247. close_out std_out [not considered a bug]
  2728. 250. interpreter broken
  2729. 251. omits tests for repeated bindings
  2730. 255. space leak with redeclaration of variables
  2731. 256. mcopt compiler bug with improper function definition
  2732. 258. System.Directory.cd failure
  2733. 262. Using the LIBRARY with v0.62 (Runbind)
  2734. 263. problem with input via datakit con
  2735. 265. strong type variables accepted in exception declarations
  2736. 266. Io exception raised by "use"
  2737. 268. import, equality
  2738. 269. failure in abstractBody with embedded signature
  2739. 270. Compiler bug: TypesUtil.lookTycPath: NULLstr 
  2740. 271. secondary compiler bug
  2741.  
  2742. ---------------------------------------------------------------------------
  2743. Standard ML of New Jersey, Version 0.64, 25 August 1990
  2744.  
  2745. The compiler and user programs should use a bit less memory, as the
  2746. collector finds more garbage.  Compilation is faster, and there
  2747. are significant performance improvements in the SPARC and MIPS code
  2748. generators.
  2749.  
  2750. A preliminary version of the ML debugger, thanks to Andrew Tolmach,
  2751. is released with this version.  See doc/debug and lib/emacs for
  2752. details.  Warning:  using the debugger increases memory requirements
  2753. and compilation time substantially.
  2754.  
  2755. Bugs fixed:  (complete descriptions are in doc/masterbugs)
  2756. 12. loss of information in value printing
  2757. 182. uncaught exception after exportFn
  2758. 185. exportML size  (negative percentages in g.c. messages)
  2759. 186. type error matching against bogus tycon
  2760. 205. performance problem with many opens in a structure
  2761. 208. bug in optimizer causing bad free variable
  2762. 213. equality on int*int  (new with 0.56)
  2763. 214. Compiler bug: EnvAccess.lookPath when printing  (new with 0.56)
  2764. 215. sin gives incorrect values
  2765. 216. floating point on SPARC
  2766. 217. simultaneous opens  (new with 0.56)
  2767. 218. compiler bug after unbound variable  (new with 0.57)
  2768. 220. Match exception after error
  2769. 225. import broken in 0.59
  2770. 227. equality property of datatypes
  2771. 230. printing reals on mips
  2772. 231. equality property of DEFtyc
  2773. 233. opening locally declared structure causes Runbind
  2774. 236. Mach problems in 0.59
  2775. 237. Can't parse most-negative integer constant
  2776. 238. div is unreliable at extremes
  2777. 239. INCONSISTENT exception raised in sharing analysis
  2778. 240. concrete printing of abstype value
  2779. 243. include compiler bug
  2780. 248. abstract types are not abstract
  2781. 249. separate compilation printing problems
  2782. 252. include broken in 0.59  (simplified version of 243.)
  2783. 254. failure to detect type error
  2784. 260. failure to raise overflow
  2785.  
  2786. ---------------------------------------------------------------------------
  2787. Standard ML of New Jersey, Version 0.56, April 1990
  2788.  
  2789. The system now runs on MIPS-based computers: 
  2790.     - MIPS computers running RISCos    (makeml -mips -riscos)
  2791.     - DEC 5400, 3100, 5800, etc. running Ultrix  (makeml -mips -bsd)
  2792.     Thanks to Norman Ramsey for this implementation.
  2793.  
  2794. Installation note:  The makeml script has changed slightly; look at makeml.1.
  2795.  
  2796. We have re-arranged our initial environment to conform better to
  2797. the Definition of Standard ML.  In particular:
  2798.  
  2799. Arithmetic exceptions:
  2800.     Sum, Prod, Diff, Neg, Exp, Floor are all equivalent to Overflow
  2801.     Div and Mod are equivalent, distinct from Overflow
  2802.     Ln is a distinct exception; Sqrt is a distinct exception    
  2803.    The exception "Real of string" is gone.  Real overflows raise Overflow,
  2804.     real underflows return 0.0 with no exception, and real divide-by-zero
  2805.     raises Div.
  2806. Div and Mod:
  2807.     Now work according to the definition, but are much slower.
  2808.     The old (faster, rounding towards zero) behavior can be had
  2809.     by using the new infixed operators, "quot" and "rem".
  2810. Input and output:
  2811.     The functions input and output are now uncurried:
  2812.         output: outstream * string -> unit
  2813.         input:  instream * int -> string
  2814.     There are two new functions:
  2815.         outputc =  curry(output)
  2816.         inputc:   a curried input function, but with a difference:
  2817.             inputc f n 
  2818.             returns "" on end-of-stream, and otherwise
  2819.             returns a string of length k, 0<k<=n,
  2820.             depending on what is available and convenient.
  2821.  
  2822. Remaining deviations from the Definition:
  2823.  
  2824. - The arithmetic overflow exceptions are all identified (see above).
  2825. - Strings carried by the Io exception are more informative in SML-NJ.
  2826. - Different right-associative operators of the same precedence
  2827.     associate to the right in SML-NJ.
  2828. - The @ operator is right-associative in SML-NJ.
  2829. - "local" and "open" specs in signatures have a different semantics
  2830.         (see doc/localspec)
  2831. - The symbol "=" can be re-bound (though usually you get a warning message)
  2832. - The construct   val ... and rec ...   is not permitted; the "rec"
  2833.     must immediately follow the "val".
  2834. - The Definition prohibits some, but not all, signatures that could
  2835.     never be matched by any structure.  We are more liberal about
  2836.     such signatures.
  2837. - The initial basis is a superset of the one described in the Definition.
  2838.  
  2839. The System structure in the initial environment has been re-arranged
  2840. slightly; see src/boot/system.sig.  In particular, "cd" is now
  2841. accessible as System.Directory.cd.
  2842.  
  2843. We know of two operating system bugs:
  2844.         A floating point exception will hang the machine in Ultrix V3.1A 
  2845.    (Rev. 26) on the DEC 5400. This is an older release of Ultrix, 
  2846.    and newer versions fix the problem.
  2847.         The "select" system call is unreliable on pipes in RISCos 4.20;
  2848.    as a result, you may have to press carriage-return after control-C
  2849.    to generate an interrupt.  We have reported this bug to MIPS.
  2850.  
  2851. Bugs fixed:  (complete descriptions are in doc/masterbugs)
  2852.  
  2853. 26. export ML within a use
  2854. 36. overloading resolution and order of recursive definitions
  2855. 40. Exception aliasing (match compiler)
  2856. 46. equality type checking and flexrecords
  2857. 68. spurious error message -- doesn't match sig spec
  2858. 69. printing of exn spec in inferred signature
  2859. 70, 204.  constructor shouldn't appear in printed structure signature
  2860. 72. equality types with abstype declarations
  2861. 80. simultaneous type declarations
  2862. 85. bad error message for failed signature match
  2863. 101. Duplicate labels (in either types or values) are not detected
  2864. 102. One-tuples are not printed sensibly.
  2865. 103. Space missing in an error message (which might be more informative).
  2866. 104. Labels with leading zeroes should not be accepted
  2867. 106. Something strange is happening with "it".
  2868. 107. NJML disappears ... when trying to parse large real numbers
  2869. 108. More faulty error recovery?
  2870. 109. sharing of datatypes not handled properly
  2871. 117. sharing and equality attributes
  2872. 118. deviation from Definition, div and mod
  2873. 119. deviation from Definition  (input and output curried)
  2874. 122. Unimplemented parts of Standard  (let and local for structures)
  2875. 123. error recovery
  2876. 124. compiler bug after incomplete qualified identifier
  2877. 126.  scope of explicit type variables
  2878. 127. sharing and equality types
  2879. 128. question mark as reserved word
  2880. 133. overloading resolution is weaker than Edinburgh SML or Poly ML
  2881. 135. eqtype vs abstype
  2882. 138. numeric labels not equivalent to tuples
  2883. 140. comment to end of file  (see also bug 64)
  2884. 141. interrupting gc dumps core
  2885. 151. can't limit length of list printed
  2886.        System.Control.Print.printLength : int ref  
  2887.        now controls number of elements printed in a long list.  Default is 12.
  2888. 153. interrupting coroutine loop dumps core
  2889. 155. Compiler bug caused by of missing structure
  2890. 160. errorty fails to match sig spec 
  2891. 167. repeated bound type variables in type declaration
  2892. 169. inferring eqtypes in signatures
  2893. 171. illegal datatype declaration accepted
  2894. 172. functor subscript error
  2895. 173. Runbind
  2896. 174. import and types
  2897. 177. clinkdata on sun 3
  2898. 179. compiler bug (783 in sigmatch)
  2899. 181. 8-bit characters not supported in strings
  2900. 183. "raise" not synchronized with evaluation sequence
  2901. 187. parsing clausal definitions with infix functions
  2902. 188. infinite loop parsing simple functor declaration
  2903. 190. unclosed string in interactive system
  2904. 191. Real operators permuted
  2905. 192. bad parsing
  2906. 193. import types
  2907. 194. weak type variable syntax 
  2908. 195. Compiler bug: abstractType
  2909. 196. Compiler bug: generalizeTy -- bad arg
  2910. 197. exportFn size
  2911. 198. printing exception specs in signatures
  2912. 200. large interger literals
  2913. 203. printing of infix specs in signatures
  2914. *.   Bugs concerning the relation of functor-result signatures to 
  2915.        functor-parameter signatures are fixed.
  2916. *.   The most-negative-integer can now be printed without overflowing.
  2917. *.   Warning messages from the match compiler, the overloading resolver,
  2918.        and the typechecker pinpoint the site of the error much more accurately.
  2919.  
  2920. Bugs re-classified:  (complete descriptions are in doc/masterbugs)
  2921. 7. constructor representation
  2922.     This now gives an error message when a user stumbles across it
  2923.     (which is exceedingly rare).  Also, we believe this is an inherent
  2924.     problem with the language, not with our compiler.
  2925. 10. exhaustiveness message at top-level.
  2926.     This is a feature.
  2927. 20. "print" is overloaded rather than polymorphic
  2928.     This is a feature.  The Definition makes no mention of "print".
  2929. 24.  incomplete write
  2930.     This is removed from the list; our new signal-handling
  2931.     system provides more appropriate primitives to solve this problem.
  2932. 86, 132. incorrectly allows redefining of "="
  2933.     Perhaps we should fix this, but it's not important to us.
  2934. 87. execute subprocess dies on interrupt on blocked input
  2935.     This is a feature (of Unix), not a bug.
  2936. 105. Large numeric labels are disallowed.    
  2937.     Tough luck.  We're not going to fix this.
  2938. 110. val rec
  2939.     This is a silliness in the Definition; we're not going to "fix" it.
  2940. 111. local polymorphic definitions
  2941.     This is not a bug; if we allow this, the type system is unsafe:
  2942.      local exception X of '_a in val exn0 = X(3) fun h(X(b:bool)) = b end;
  2943.      raise exn0 handle e => h(e);
  2944. 115. cyclic signatures
  2945.     We reserve the right to accept some signatures, even if there's
  2946.     no structure that they could match.
  2947. 116. pattern declares no variables warning (?)
  2948.     This is a feature.  Can't you tell?
  2949. 120. deviation from Definition (arithmetic exceptions)
  2950.     This is fixed, after a fashion;  see above.
  2951. 121. Unimplemented parts of Standard (open specs)
  2952.     See doc/localspec
  2953. 122. Unimplemented parts of Standard (local specs)
  2954.     See doc/localspec
  2955. 164. NS32 in makeml
  2956.     We are not currently supporting the NS32000 architecture,
  2957.     but we may again support it with cooperation from users.
  2958.  
  2959. The typechecker and match compiler give much more informative messages
  2960. if System.Control.markabsyn is true.  Unfortunately this requires
  2961. (even) more memory.
  2962.  
  2963. The debugger (courtesy of Andrew Tolmach) is present in the source, but
  2964. does not yet work and is not installed.
  2965.  
  2966. The internal representation of first-class continuations is more explicit
  2967. about exception-handlers; this will be useful for the new signal-handler
  2968. mechanism.
  2969.  
  2970. The type-checker is much cleaned up.  User-bound type variables don't appear
  2971. in global symbol tables.
  2972.  
  2973. Minor (unreported) bugs in the precedence parser and SPARC code generators
  2974. are fixed.
  2975.  
  2976. ---------------------------------------------------------------------------
  2977. Standard ML of New Jersey version 0.49, 26 January 1990
  2978.  
  2979. New Parser:  The parser is now completely rewritten, using the parser
  2980. generator developed by David Tarditi and Andrew Appel.  It's a bit
  2981. slower and a bit bigger (though we're working on these problems), but
  2982. it generates significantly better error messages and error recovery.
  2983. It's also more maintainable.
  2984.  
  2985. ML now runs on 68020-based HP workstations running either HP-UX or MORE.
  2986.  
  2987. Making sharable images:
  2988. There is now a new version of "linkdata", called "clinkdata", that
  2989. is relatively machine- and operating-system-independent, but
  2990. is much faster than the old "slinkdata".  This will be of interest to
  2991. NeXT users, MIPS users, and other users of operating systems where
  2992. the "a.out" format is different from Berkeley Unix.  The "makeml"
  2993. file now uses "clinkdata" instead of "slinkdata" for such machines.
  2994.  
  2995. Bug fixes---many bugs are fixed, including:
  2996.  
  2997. 2. (L.3):  Mispelled nonnullary constructors in patterns [parser]
  2998. 8. (L.9):  interactive error recovery
  2999. 11. (L.12):  poor error messages [parser]
  3000. 15. (E.12):  Error message
  3001. 17. (E.25):  Inaccurate line numbers
  3002. 29. (E.62):  use_string in structure definition
  3003. 48. printing of identity withtype declarations
  3004. 63. curried, clausal def of infix function
  3005. 70. (E.74) constructor shouldn't appear in printed structure signature
  3006. 71. (E.75) Failure to restore enviroment after exception in "use"
  3007. 73. strange function definition
  3008. 77. unparenthesized infix expressions in fun lhs
  3009. 79. withtype
  3010. 83. unexpected parsing of erroneous datatype declaration
  3011. 89. continuation line string escape at beginning of string
  3012. 90. secondary prompt is not set in multi-line strings and comments.
  3013. 95. infix declaration interferes with type parsing
  3014. 100. constructor not printed after open declaration
  3015. 112. equality of ~0.0 and ~ 0.0
  3016. 113. empty declarations
  3017. 117. sharing and equality attributes
  3018. 134. type checking
  3019. 136. linkdata problem
  3020. 145. stale top-level continuations cause type bugs
  3021. 150. incomplete sharing spec accepted
  3022. 152. floating point errors (wasn't a bug)
  3023. 154. import smashing memory (fixed in 0.44a, actually)
  3024. 156. confusing parser error message
  3025. 157. nested imports corrupt memory (same as 154)
  3026. 162. ByteArray subscript exception expected (wasn't a bug)
  3027. 163. function definition syntax
  3028. 170.  error in makeml script 
  3029. 201. funny tycon aliasing behavior
  3030. 202. type error not caught?
  3031. 204. constructors printed when not accessible
  3032. . Runs on NeXT machine (there was a bug in makeml)
  3033. . Runs on HP workstation (68020-based)
  3034. . exportFn images will never include the compiler, as they sometimes did.
  3035.  
  3036. ------------------------------------------------------------------------------
  3037. Standard ML of New Jersey version 0.44, 4 December 1989
  3038.  
  3039. New release:
  3040.  
  3041. Starting with this release, the compiler source code is covered by an AT&T
  3042. copyright notice, which is included in each source code file.  The file
  3043. doc/COPYRIGHT contains the official copyright notice, license, and
  3044. disclaimer.  The file doc/release-form contains a release form that our
  3045. lawyer would like you to sign if you contribute software or modifications
  3046. that are included in the distribution.  Whether you sign it as an
  3047. individual or get your institution to sign it is your decision, but it is
  3048. undoubtedly quicker and simpler to sign as an individual.  The release form
  3049. is not necessary for simple bug fixes.
  3050.  
  3051. Mailing list:
  3052.  
  3053. There is now a Standard ML mailing list for messages and queries of general
  3054. interest to the ML community.  You can join by sending a request to
  3055. sml-request@cs.cmu.edu, and you can send a message to the list by mailing
  3056. to sml@cs.cmu.edu.  This mailing list will be the main vehicle for
  3057. distributing announcements about Standard ML of New Jersey.
  3058.  
  3059. Modules:
  3060.  
  3061. All known major bugs in the module system have been fixed, so please report
  3062. any new bugs or old bugs we missed.  The full module syntax from the
  3063. Definition, Version 3 is now implemented with minor limitations or
  3064. extensions, including let structure expressions and local and open
  3065. signature specs (see comments in doc/localspec).  Include specs work
  3066. properly once again.
  3067.  
  3068. Local and open specs:
  3069.  
  3070. David MacQueen has some comments about "local" and "open" specifications
  3071. in signatures; see doc/localspec.
  3072.  
  3073. Weak type variable syntax:
  3074.  
  3075. Standard ML of New Jersey has a more precise system for weak typing
  3076. (i.e. typechecking of programs that use semi-polymorphic reference
  3077. variables).  Other compilers denote weak type variables with an underscore,
  3078. i.e. '_abc, while ours uses an initial integer to denote level of weakness,
  3079. i.e. '2abc.  See doc/weak-types for a fuller explanation.  However,
  3080. for compatibility:
  3081.   The notation for weak type variables using an initial underscore is now
  3082. supported for input and output.  A weak type variable of the form '_a
  3083. is equivalent to the numeric form '1a.  On output, weak type variables
  3084. are printed using an initial integer.  However, if the ref variable 
  3085. System.Control.weakUnderscore is set to true, then weak type variables
  3086. of all levels are printed with an underscore.
  3087.  
  3088. Equality types:
  3089.  
  3090. Equality types are still broken.  Fixing these is the next order of business.
  3091.  
  3092. Import:
  3093.  
  3094. Nested imports do not work reliably in this version.
  3095.  
  3096. Optimizing compiler:
  3097.  
  3098. Hints on making your programs run faster are in doc/optimize.
  3099.  
  3100. Miscellaneous:
  3101.  
  3102. The SPARC code generator has been completely rewritten by John Reppy.
  3103.  
  3104. Bruce Duba continues to make improvements to the CPS code generator.
  3105.  
  3106. Andrew Appel is re-writing the parser to use David Tarditi's newest
  3107. version of the ML parser generator; this re-write is not complete but
  3108. the source files are included (along with the working recursive descent
  3109. parser) in src/parse/.
  3110.  
  3111. Linkdata:
  3112.  
  3113. The "linkdata" program, used for making a sharable version of the ML
  3114. compiler by putting all the .mo files into the text segment, did not work
  3115. on all operating systems.  There is a more portable, albeit much less
  3116. efficient, version of linkdata called "slinkdata".  Look in "src/makeml" to
  3117. see how it is used for the NeXT operating system, and you can use it that
  3118. way for your operating system too.  (Admittedly, this is very minimal
  3119. documentation!)
  3120.  
  3121. Bug fixes:
  3122.  
  3123. See latest doc/bugs file for remaining bugs.  This has been brought more or
  3124. less up to date.  We appreciate your bug reports and hope you will be 
  3125. patient as we work our way through them.  There is a new version of the
  3126. bug report format file (doc/bug.form), including a new "Severity:" field
  3127. that you should use to indicate how serious the bug is from your point of
  3128. view.  We get a lot of bug reports (which is good!) but we may not assign
  3129. the right priority to them without your help.
  3130.  
  3131. Version 1 plan:
  3132.  
  3133. Our tentative schedule calls for the release of version 1 of the compiler in
  3134. mid-January 1990.  There will probably be one more beta release between now
  3135. and then.  This is a more or less arbitrary deadline, and we will try to fix
  3136. as many bugs as possible before version 1 is released.  Development of the
  3137. compiler will continue as usual following this milestone, and major, widely
  3138. publicized releases will occur on a more regular and less frequent schedule,
  3139. e.g. perhaps three times a year.  Interim developmental versions can be made
  3140. available to those who have a special need for them.
  3141.  
  3142. ------------------------------------------------------------------------------
  3143. Standard ML of New Jersey version 0.42, 27 October 1989
  3144.  
  3145. Release notes by Andrew Appel, covering changes since version 0.39.
  3146.  
  3147. Bug fixes:
  3148.  
  3149. Large floating point literals do the right thing now, at least on the Vax.
  3150.  
  3151. Duplicate constructor names and field names are again detected.
  3152.  
  3153. Printing of records like {1="abc"} works correctly.
  3154.  
  3155. Reading 1025 bytes from standard input works.
  3156.  
  3157. Large list expressions of the form [(0,0),(0,0),(0,0), ..... (0,0)] no longer
  3158.    cause the compiler to blow up.
  3159.  
  3160. Previous versions have run on Sun-3s with Mach, this version might work
  3161. on Vaxes with Mach.  The next version should run on anything with Mach.
  3162.  
  3163. Compile-time processing of functors has been extensively rewritten,
  3164. and should be more robust.  There are still some remaining bugs, however,
  3165. which should now be easy to iron out.
  3166.  
  3167. The Io exception now carries a much more useful string value, containing
  3168. all sorts of information.
  3169.  
  3170. Other changes since version 0.39 are mostly of interest to implementors.
  3171. VALvars and STRvars now have qualids instead of ids, lexer interface
  3172. parametrized more cleanly.  Page-faulting is no longer used to detect
  3173. end-of-memory on most machines.
  3174.  
  3175. ---------------------------------------------------------------------------
  3176. Standard ML of New Jersey version 0.39, 8 September 1989
  3177.  
  3178. This notes overlap with the 0.36 release notes, since 0.36 was not
  3179. widely distributed [neither were 0.37 or 0.38].
  3180.  
  3181. Release notes by Andrew Appel.
  3182.  
  3183. Changes since version 0.33:
  3184.  
  3185. 1.  Support for Sun-4 (SPARC) thanks to John Reppy at Cornell;
  3186.     Encore (NS32032), NeXT (also Mach on other 68020 machines), and 
  3187.     Sony NEWS (68020-based workstation), thanks to James O'Toole at MIT.
  3188.  
  3189. 2.  An interpreter for faster compilation (4x) but slower execution (18x).
  3190.     Set System.Control.interp := true to enable this mode.  Use the -i
  3191.     or -ionly to makeml to set this option as the default.
  3192.  
  3193. 3.  Delay and Force primitives (meant for internal use only) for research
  3194.     in lazy evaluation.
  3195.  
  3196. 4.  Bug fixes:   reading 2049-byte files works now.  Separate compilation
  3197.     shouldn't dump core.  Miscellaneous others.
  3198.  
  3199. 5.  A code generator generator implemented by Johan Lilius,
  3200.     Jari Porra, & Jussi Rintanen of Helsinki University of Technology 
  3201.     is include in the Standard ML Software Library: see lib/twig.
  3202.  
  3203. 6.  Various internal efficiency improvements; the CMACHINE signature was
  3204.     simplified a bit; the format of generational-gc update lists was changed;
  3205.     the CPS optimizer was beefed up.
  3206.  
  3207. 7.  Separate compilation has been improved.  The compiled version of a 
  3208.     separately compiled file has the extension ".bin", and internally
  3209.     identifies the version of SML-NJ and also the machine type it 
  3210.     runs on.  The command "head -1 foo.bin" will print this information.
  3211.  
  3212. 8.  Many functor bugs have been fixed.
  3213.  
  3214. 9.  An improved version of ML-Yacc by David Tarditi at Princeton is provided,
  3215.     more efficient and with a better interface, and with sophisticated syntax
  3216.     error recovery.
  3217.  
  3218. Forthcoming in future releases:
  3219.  
  3220. - Mach support for Vax and other machines.
  3221.  
  3222. - Some work has been done on a MacIntosh II port, and we are hoping for
  3223. volunteers to continue this work.
  3224.  
  3225. - Our MIPS code generator almost works now (thanks to Norman Ramsey at
  3226. Princeton).
  3227.  
  3228. -----------------------------------------------------------------------------
  3229. What's new in SML of NJ Version 0.33, 1 April 1989
  3230.  
  3231. 1. CPS code generator
  3232.  
  3233. This version uses a new CPS (Continuation Passing Style) code
  3234. generator.  The CPS code generator differs from the older code
  3235. generator in the following ways:
  3236.  
  3237.    (i) The code produced is about 50% faster.
  3238.  
  3239.    (ii) The compiler generates code about half as quickly (this should
  3240. gradually improve with future releases).
  3241.  
  3242.    (iii) the new code generator does not use a stack.  This makes it easier
  3243. to support experimental features like callcc and multiple processes.
  3244. It also makes efficient garbage collection even more critical.
  3245.  
  3246.    (iv) The cps code generator tends to build larger intermediate
  3247. representations, so tuning of the runtime system becomes more
  3248. important.  See the discussion of memory management in doc/INSTALL.
  3249.  
  3250.  
  3251. 2. The runtime system
  3252.  
  3253. The runtime system has been extensively rewritten and cleaned up.  The
  3254. amount of assembly code has been reduced (only 220 lines for the Vax,
  3255. 385 for the Sun), and the system call interface has been simplified.  The
  3256. mechanism for initiating garbage collection has been made more robust.
  3257. In the m68 version (for Sun 3), exhaustion of free space is detected
  3258. by an explicit comparison rather than by trapping a segmentation fault.
  3259. This finally eliminates persistent flakiness caused by the way the 68020
  3260. recovers from segmentation faults.
  3261.  
  3262. LaTeX source for a new paper describing the runtime system can be
  3263. found in doc/papers/runtime.  This is still an early draft, but it should
  3264. be helpful in understanding internals of the run time system.
  3265.  
  3266.  
  3267. 3. The pervasive environment
  3268.  
  3269. The initial environment has been reorganized to make it possible to
  3270. build a system whose pervasives (i.e., built-in bindings) correspond
  3271. closely to those described in "The Definition of Standard ML, Version
  3272. 2" by R. Harper, R. Milner, and M. Tofte (ECS-LFCS-88-62, August 1988,
  3273. hereafter referred to as the "Definition").  Note that in our humble
  3274. opinion the "standard" environment is somewhat brain-damaged and is
  3275. missing many important features (like arrays, bytearrays, etc).  See
  3276. the file doc/environ for discussion of specific deficiencies of the
  3277. environment described in the Definition and our proposed fixes, some
  3278. of which are incorporated in the "New Jersey" environment.
  3279.  
  3280. The default initial environment set up by the bootstrapping process is
  3281. the richer, and more efficient, New Jersey environment.  However,
  3282. loading the source file src/lib/standard.sml defines a structure named
  3283. Standard that provides a close approximation to the "standard"
  3284. environment.  Opening the structure Standard at the top level replaces
  3285. any nonstandard bindings in the New Jersey environment.  The New
  3286. Jersey environment is still there in the background, so any New Jersey
  3287. bindings not rebound in Standard will still be visible.  In the future
  3288. we may provide a mechanism (e.g. a function switchEnv: string -> unit)
  3289. for completely replacing the base environment with a different version
  3290. specified by a structure.  For example, `switchEnv "Standard"' would
  3291. replace the existing base environment with the contents of Standard.
  3292.  
  3293. The initial environment also contains:
  3294.  
  3295. (1) The signatures ARRAY, BASICIO, BITS, BOOL, BYTEARRAY, GENERAL, IO,
  3296.     INTEGER, LIST, REF, STRING, and REAL as defined in src/boot/perv.sig, 
  3297.     and the signature SYSTEM as defined in src/boot/system.sig
  3298.  
  3299. (2) The structures Array : ARRAY, BasicIO : BASICIO, Bits : BITS, etc.
  3300.     These contain the New Jersey versions of bindings.
  3301.  
  3302. (3) The structure NewJersey, which contains the complete New Jersey initial
  3303.     environment except for the signatures in (1) above and the structure
  3304.     NewJersey itself.
  3305.  
  3306. It follows that even if Standard has been defined and opened, all New Jersey
  3307. bindings are available via the structure NewJersey, or alternatively via
  3308. the structures Array, IO, etc.
  3309.  
  3310. Here are some differences between the New Jersey and Standard environments:
  3311.  
  3312.   a.  The functions +, /, *, -, div, mod are an order of magnitude 
  3313.       slower in Standard than in the New Jersey environment.  This is
  3314.       because they are required to raise distinct exceptions (according
  3315.       to the Definition), and because the treatment of negative arguments
  3316.       of div and mod doesn't match what the hardware provides; that
  3317.       complicates their implementation.  The NewJersey functions all raise
  3318.       Overflow on results that won't fit in 31 bits (and Div on zero divisor
  3319.       for div and mod).
  3320.  
  3321.   b.  The functions div and mod return different results.
  3322.  
  3323.   c.  input and output are curried in NewJersey (and in the IO structure),
  3324.       but not in Standard.
  3325.  
  3326.   d.  The New Jersey environment has many more functions in it, as described
  3327.       in the appendix of our reference manual or the signatures in the files
  3328.       src/boot/perv.sig and src/boot/system.sig.
  3329.  
  3330. The New Jersey environment has changed slightly from previous releases,
  3331. mostly to make the it more compatible with the Definition [IMPORTANT --
  3332. THESE CHANGES MAY BREAK SOME PROGRAMS]:
  3333.  
  3334.   a.  The exception Io_failure has been renamed Io for consistency
  3335.       with the Definition.
  3336.  
  3337.   b.  The exception Float has been renamed Real.  Float is still defined
  3338.       as a synonym for Real.
  3339.  
  3340.   c.  The identifier "length" is no longer overloaded: use "size" or
  3341.       "String.size" for string lengths, "length" or "List.length" for
  3342.       list lengths, and "Array.length" for array lengths.
  3343.  
  3344.   d.  The functions "cd" and "system" are now components of the
  3345.       System structure.
  3346.  
  3347.   e.  Various components of the System structure have been moved
  3348.       into the System.Unsafe substructure, and are not recommended for
  3349.       casual use.
  3350.  
  3351.   f.  The print functions (Integer.print, Real.print, String.print,
  3352.       and the overloaded print), now return unit rather than their
  3353.       argument.  This is because we found that in our code virtually
  3354.       every call of print was followed by "; ()".
  3355.  
  3356. We plan to provide a definition of the NewJersey structure in terms of
  3357. the "standard" environment (analogous to the definition of Standard in
  3358. lib/src/standard.sml).  This structure would enable any Standard ML
  3359. system to run programs based on the New Jersey environment.  Such
  3360. programs should not reference the System structure, of course.
  3361.  
  3362. 4. Command line arguments and Shell environment
  3363.  
  3364. System.argv : unit -> string list
  3365. System.environ : unit -> string list
  3366.  
  3367. are new functions that return the list of command line arguments and
  3368. the Unix shell environment, respectively.
  3369.  
  3370. 5. First-class continuations: callcc, throw, and cont (experimental)
  3371.  
  3372. These are new experimental primitives to allow one to capture and use
  3373. "first-class continuations".  See the file doc/callcc for
  3374. documentation of these new facilities.
  3375.  
  3376. 6. Separate compilation (experimental)
  3377.  
  3378. We have integrated code written by Nick Rothwell and Mads Tofte of
  3379. Edinburgh that provides a preliminary, experimental form of secure (type
  3380. checked) separate compilation.  There is a special declaration form:
  3381.  
  3382.    import "filename"
  3383.  
  3384. where "filename" is a string literal designating either a source file
  3385. filename.sml or a binary file filename.bin.  If only the source file
  3386. exists in the current directory, then it is compiled and the binary
  3387. version is created.  If the binary version exists, it is loaded
  3388. instead of the source file.
  3389.  
  3390. As a consequence of adding this new facility, the identifier "import"
  3391. has become a reserved word.  This may cause incompatibilities with
  3392. existing code.
  3393.  
  3394. 7. mlyacc
  3395.  
  3396. The new directory src/lib/mlyacc contains a yacc-like parser generator
  3397. written in ML, with documentation.  The parser generator is used much
  3398. like the Unix yacc utility, and the grammar specification language is
  3399. essentially that of yacc.  The parser generator was written by David
  3400. Tarditi of Princeton, based on an earlier effort by Nick Rothwell.
  3401. Other, more sophisticated, interfaces to the parser generator will
  3402. probably be provided in future releases.  As before, the directory
  3403. src/lib/lexgen contains a lexical analyzer generator.
  3404.  
  3405. 8. Fixes
  3406.  
  3407. A number of things that have been broken are now fixed.  This includes
  3408. the garbage collector for the Sun 3, floating point operations on the
  3409. Sun 3, exportFn, sqrt, and execute.  Unfortunately, many old bugs
  3410. remain and the error messages are just as bad as ever.  We expect the
  3411. next release to fix many of these problems.  Bug reports are welcome as
  3412. ever, as are bug fixes.
  3413.  
  3414. 9. Things to come
  3415.  
  3416. John Reppy has ported SML of NJ to the Sun 4 (SPARC) architecture and
  3417. his code generator will be included in the next release.  A port to
  3418. the MIPS architecture (DECstation 3100 under Ultrix) is in the works
  3419. at Princeton, and a NeXT port is likely.  A port to the Mac II under
  3420. the native Mac OS may also appear soon.
  3421.  
  3422. We are working on a new licensing scheme similar to that used by the
  3423. Free Software Foundation.  We hope to have this approved within three
  3424. months, and we will keep you informed of new developments.
  3425.  
  3426. ------------------------------------------------------------------------------
  3427. New features of SML of NJ Version 0.24 (November 22, 1988)
  3428.  
  3429. 1. Profiler
  3430.  
  3431. A call-count and statistical profiler has been implemented.  See
  3432. operating instructions in the README file, and the paper provided in
  3433. src/doc/papers/profiling.
  3434.  
  3435.  
  3436. 2. Runtime reorganization
  3437.  
  3438. The runtime system has been reorganized to reduce the need for assembly
  3439. language and provide a standard interface for Unix system calls and
  3440. C code.  It should become possible to add special purpose C code to
  3441. the runtime system, for instance to provide an X windows interface.
  3442. Many of the assembly language functions have been replaced by more
  3443. portible C implementations and uses of the system call interface.
  3444. See src/doc/VERSION.24 for some more details.
  3445.  
  3446.  
  3447. 3. Memory Management tuning
  3448.  
  3449. The variable
  3450.  
  3451.   System.Control.Runtime.ratio : int ref
  3452.  
  3453. can be used to control the garbage collection behavior to some extent,
  3454. in conjunction with the Unix limit variable (in the csh).  See the
  3455. discussion in README.
  3456.  
  3457.  
  3458. 4. Simple gnu emacs sml mode
  3459.  
  3460. A simple gnu emacs sml mode was contributed by Mitch Wand.  It can be
  3461. found in src/lib/sml.el.  If you have a better mode or make improvements
  3462. on this version, please send them in to macqueen@research.att.com for
  3463. inclusion in future releases.
  3464. --------------------------------------------------------------------------
  3465. New features of SML of NJ Version 0.22 (October 10, 1988)
  3466.  
  3467. This file describes the most notable changes since version 0.20.  (Version 0.21
  3468. was a local version that was not distributed.)
  3469.  
  3470.  
  3471. 1. Bugs
  3472.  
  3473. A few bugs have been fixed; exportFn works again; the system runs under the
  3474. latest version (4.0) of Sun Unix on a Sun-3.  See src/doc/bugs for the
  3475. remaining known bugs.  The next release with many more bug fixes will
  3476. probably follow fairly shortly.
  3477.  
  3478.  
  3479. 2. Sharable text segments
  3480.  
  3481. We now have an option to run sml with the compiler read-only and sharable
  3482. (in the Unix text segment).  This should help on systems where several
  3483. people are running sml at once, and also improves garbage-collector performance.
  3484. See src/doc/INSTALL for more info.
  3485.  
  3486.  
  3487. 3. CPS code generator
  3488.  
  3489. We are including the source code for the new cps code generator with
  3490. this release for those who would like an early look at it.  This code
  3491. generator is still under development and works only on Vaxes at this
  3492. point.
  3493.  
  3494.  
  3495. 4. Installation
  3496.  
  3497. The maker script for building the interactive image has been reorganized
  3498. and new scripts maker.batch and maker.run have been added to simplify
  3499. making batch systems and compiling the runtime system.  See src/doc/INSTALL
  3500. and src/doc/BATCHINSTALL for details.
  3501.  
  3502.  
  3503. 5. Lexer generator
  3504.  
  3505. The directory src/lib is a new directory for contributed software.
  3506. The programs included here do not come under the terms of the AT&T
  3507. license.  The first contributed software is a lexical analyzer
  3508. generator similar to the Unix lex utility.  It is in src/lib/lexgen.
  3509. lexgen has been used to generate a new lexical analyzer for the
  3510. compiler.  The specification is in src/lex/ml.lex.
  3511.  
  3512.  
  3513. ----------------------------------------------------------------------------
  3514. New features of SML of NJ Version 0.20
  3515.  
  3516. This file describes the most notable changes since version 0.18.  (Version 0.19
  3517. was a local version that was not distributed.)
  3518.  
  3519. 1. Bugs
  3520.  
  3521. Quite a few bugs have been fixed, mostly relating to type checking and modules.
  3522. See src/doc/bugs for the remaining known bugs.  
  3523.  
  3524.  
  3525. 2. Reference types
  3526.  
  3527. The typing of references and arrays is less restrictive.  For
  3528. instance, the following is now permitted, whereas it used to cause an
  3529. error message:
  3530.  
  3531.    let val r = ref [] in r := [1]; !r end;
  3532.  
  3533. Thus locally declared reference variables like r in this example do not
  3534. need to be explicitly constrained to have a monotype.
  3535.  
  3536.  
  3537. 3. Equality types
  3538.  
  3539. Equality types are now implemented.  Equality types are those
  3540. "hereditarily concrete" types whose values admit structural equality.
  3541. The implementation of equality types involves the new signature
  3542. specification keyword "eqtype" indicating that the specified type
  3543. constructor admits equality, and special equality type variables
  3544. starting with double single quotes (e.g. ''a) that are restricted to
  3545. range over equality types.  
  3546.  
  3547. An equality type is one containing only type constructors that "support
  3548. equality".  The following type constructors support equality:
  3549.  
  3550.    int, string, real
  3551.    
  3552.    any datatype whose constuctor argument types are equality types
  3553.    (disregarding parameter type variables)
  3554.  
  3555.    record type constructors
  3556.  
  3557.    type constructors from functor parameters that are specified as eqtypes
  3558.  
  3559. In addition, any reference or array type is an equality type.
  3560.  
  3561. Abstract type constructors, "->", and exn do not support equality.
  3562.  
  3563.  
  3564. 4. Include specifications in signatures
  3565.  
  3566. Include specifications allow one to include the specifications of a previously
  3567. defined signature in a new signature.  The syntax is 
  3568.  
  3569.    include SIG
  3570.  
  3571. where SIG is the name of a signature.  For example, given the declaration
  3572.  
  3573.    signature AA =
  3574.    sig 
  3575.      type t
  3576.      val x : t
  3577.    end
  3578.  
  3579. the declaration 
  3580.  
  3581.    signature BB =
  3582.    sig
  3583.      include AA
  3584.      val y : t -> int
  3585.    end
  3586.  
  3587. is equivalent to
  3588.  
  3589.    signature BB =
  3590.    sig
  3591.      type t
  3592.      val x : t
  3593.      val y : t -> int
  3594.    end
  3595.  
  3596.  
  3597. 5. Free identifiers in signatures and structures
  3598.  
  3599. Structure definitions can now contain free identifiers of any sort
  3600. (values, constructors, exceptions, types), not just free signatures,
  3601. structures and functors.  Signature definitions can contain free
  3602. structure and type identifiers, as well as free signature identifiers.
  3603.  
  3604.  
  3605. 6. Printing of signatures and structures
  3606.  
  3607. Signatures defined at top level are printed.  Structures defined at
  3608. top level have their signatures printed (currently in full -- in the
  3609. future only the name of the signature will be printed if it has one).
  3610. Printing of signatures can be turned off by setting the flag
  3611. System.Control.Print.signatures to false.
  3612.  
  3613.  
  3614. 7. Memory management improvements
  3615.  
  3616. The runtime system manages memory better.  The system automatically
  3617. resizes the heap on startup and during collections, allowing the
  3618. system to perform more gracefully on systems with limited memory.
  3619.  
  3620. The behavior and type of the flag controlling gc messages has changed:
  3621.  
  3622.   System.Control.Runtime.gcmessages: int ref
  3623.     when 0, no messages are printed
  3624.     when 1, only major collections are reported
  3625.     when 2, major collections and heap resizings are reported
  3626.     when 3, minor and major collections and heap resizings are reported
  3627.